{"version":3,"file":"index-DFam5V4O.mjs","sources":["../../../std/src/math.ts","../../../std/src/object/index.ts","../../../std/src/object/filter.ts","../../../std/src/string.ts","../../src/http/utils.ts","../../../../node_modules/slice-ansi/node_modules/ansi-styles/index.js","../../../../node_modules/slice-ansi/index.js","../../../../node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.js","../../../../node_modules/cli-truncate/node_modules/strip-ansi/index.js","../../../../node_modules/cli-truncate/node_modules/ansi-regex/index.js","../../../../node_modules/eastasianwidth/eastasianwidth.js","../../../../node_modules/emoji-regex/index.js","../../../../node_modules/cli-truncate/node_modules/string-width/index.js","../../../../node_modules/cli-truncate/index.js","../../src/node/shared.ts","../../src/node/error/source-map.ts","../../src/node/error/print-code-frame.ts","../../../std/src/array/create.ts","../../src/node/error/serialize-error.ts","../../src/node/error/stack-trace.ts","../../src/node/error/print-pretty-error.ts","../../src/node/serializers.ts","../../src/node/json.ts","../../src/node/pretty.ts","../../../std/src/memoize.ts","../../src/node/index.ts"],"sourcesContent":["export const sum = (values: number[]) => values.reduce((acc, item) => acc + item, 0);\n","import { filterObject } from './filter';\n\nexport { fromEntries, fromKeys, zipObject } from './create';\nexport { shallowEqual } from './equals';\nexport { compactObject, filterObject } from './filter';\nexport { mapEntries, mapKeysToObject, mapToObject, mapValues } from './map';\nexport { sortObject, sortObjectByKeys, sortObjectByOrder } from './sort';\n\nexport const omit = <T extends object, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> =>\n  filterObject(obj, (_, key) => !keys.includes(key as any)) as Omit<T, K>;\n\nexport const pick = <T extends object, K extends keyof T>(target: T, keys: K[]) =>\n  Object.fromEntries(Object.entries(target).filter(([key]) => keys.includes(key as K))) as Pick<\n    T,\n    K\n  >;\n\nexport const pickProps =\n  <K extends keyof any>(keys: K[]) =>\n  <T extends Record<K, unknown>>(target: T): Pick<T, K> =>\n    pick(target, keys);\n\nexport const prop =\n  <P extends string>(prop: P) =>\n  <T extends { [K in P]: unknown }>(value: T): T[P] =>\n    value[prop];\n","import type { Falsy } from '../shared';\nimport { entries, isTruthy } from '../shared';\n\nexport type IsNever<T> = [T] extends [never] ? true : false;\n\ntype NotFalsyKeys<T> = {\n  [K in keyof T]: IsNever<Exclude<T[K], Falsy>> extends false ? K : never;\n}[keyof T];\n\nexport type Compacted<T> = {\n  [K in NotFalsyKeys<T>]: Exclude<T[K], Falsy>;\n};\n\nexport function filterObject<T>(\n  record: T,\n  fn: <K extends Extract<keyof T, string>>(value: T[K], key: K) => boolean\n) {\n  return Object.fromEntries(entries(record).filter(([key, value]) => fn(value, key))) as T;\n}\n\nexport const compactObject = <T>(target: T) => filterObject(target, isTruthy) as Compacted<T>;\n","export const truncateString = (str: string, maxLength: number, suffix = '...') =>\n  str.length <= maxLength ? str : str.slice(0, maxLength - suffix.length) + suffix;\n\nexport const quickPluralize = (count: number, one: string, other: string) =>\n  rules.select(count) === 'one' ? one : other;\n\nconst rules = new Intl.PluralRules('en-US');\n","import { IncomingMessage, OutgoingMessage } from 'http';\nimport type { Colors } from '@neodx/colors';\nimport { truncateString } from '@neodx/std';\n\nexport const formatOutgoingMessageStatus = (res: OutgoingMessage) => {\n  if (!res.headersSent) return 'unknown status';\n  const { statusCode, statusMessage } = res as any;\n\n  return `${statusCode} ${statusMessage}`;\n};\n\nexport const formatIncomingMessage = (req: IncomingMessage, colors: Colors, delimiter = ' ') =>\n  `${colors.bold(req.method?.toUpperCase() ?? 'GET')}${delimiter}${colors.underline(\n    colors.gray(truncateString(getIncomingMessageUrl(req).split('?')?.shift() ?? '', 50))\n  )}`;\n\nexport const formatResponseTime = (time: number) => {\n  const showSeconds = time >= 100;\n  const timeValue = showSeconds ? time / 1000 : time;\n\n  return timeValue\n    .toLocaleString('en', {\n      style: 'unit',\n      unit: showSeconds ? 'second' : 'millisecond',\n      unitDisplay: 'narrow',\n      maximumFractionDigits: 1\n    })\n    .padEnd(4);\n};\n\nexport function serializeHttpRequest(req: IncomingMessage) {\n  const { id, info, query, method, params, headers, [HTTP_LOG_RAW_SYMBOL]: raw } = req as any;\n  const connection = info || req.socket;\n\n  return {\n    id: typeof id === 'function' ? id() : id ?? info?.id,\n    url: getIncomingMessageUrl(req),\n    query,\n    params,\n    method,\n    headers,\n    remotePort: connection?.remotePort,\n    remoteAddress: connection?.remoteAddress,\n    [HTTP_LOG_RAW_SYMBOL]: raw || req\n  };\n}\n\nexport function serializeHttpResponse(res: OutgoingMessage) {\n  return {\n    statusCode: res.headersSent ? (res as any).statusCode : null,\n    headers: res.getHeaders(),\n    [HTTP_LOG_RAW_SYMBOL]: res\n  };\n}\n\nexport const getIncomingMessageUrl = ({ originalUrl, path, url }: any) =>\n  originalUrl || (typeof path === 'string' ? path : url?.path ?? url);\n\nexport const createRequestIdGenerator = () => {\n  let currentRequestId = 0;\n\n  return function generateRequestId() {\n    currentRequestId = currentRequestId >= maxInt ? 0 : currentRequestId + 1;\n\n    return currentRequestId;\n  };\n};\n\nexport const HTTP_LOG_START_TIME_SYMBOL = Symbol('HTTP_LOG_START_TIME');\nexport const HTTP_LOG_RAW_SYMBOL = Symbol('raw');\n\nconst maxInt = 2147483647;\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import isFullwidthCodePoint from 'is-fullwidth-code-point';\nimport ansiStyles from 'ansi-styles';\n\nconst astralRegex = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/;\n\nconst ESCAPES = [\n\t'\\u001B',\n\t'\\u009B'\n];\n\nconst wrapAnsi = code => `${ESCAPES[0]}[${code}m`;\n\nconst checkAnsi = (ansiCodes, isEscapes, endAnsiCode) => {\n\tlet output = [];\n\tansiCodes = [...ansiCodes];\n\n\tfor (let ansiCode of ansiCodes) {\n\t\tconst ansiCodeOrigin = ansiCode;\n\t\tif (ansiCode.includes(';')) {\n\t\t\tansiCode = ansiCode.split(';')[0][0] + '0';\n\t\t}\n\n\t\tconst item = ansiStyles.codes.get(Number.parseInt(ansiCode, 10));\n\t\tif (item) {\n\t\t\tconst indexEscape = ansiCodes.indexOf(item.toString());\n\t\t\tif (indexEscape === -1) {\n\t\t\t\toutput.push(wrapAnsi(isEscapes ? item : ansiCodeOrigin));\n\t\t\t} else {\n\t\t\t\tansiCodes.splice(indexEscape, 1);\n\t\t\t}\n\t\t} else if (isEscapes) {\n\t\t\toutput.push(wrapAnsi(0));\n\t\t\tbreak;\n\t\t} else {\n\t\t\toutput.push(wrapAnsi(ansiCodeOrigin));\n\t\t}\n\t}\n\n\tif (isEscapes) {\n\t\toutput = output.filter((element, index) => output.indexOf(element) === index);\n\n\t\tif (endAnsiCode !== undefined) {\n\t\t\tconst fistEscapeCode = wrapAnsi(ansiStyles.codes.get(Number.parseInt(endAnsiCode, 10)));\n\t\t\t// TODO: Remove the use of `.reduce` here.\n\t\t\t// eslint-disable-next-line unicorn/no-array-reduce\n\t\t\toutput = output.reduce((current, next) => next === fistEscapeCode ? [next, ...current] : [...current, next], []);\n\t\t}\n\t}\n\n\treturn output.join('');\n};\n\nexport default function sliceAnsi(string, begin, end) {\n\tconst characters = [...string];\n\tconst ansiCodes = [];\n\n\tlet stringEnd = typeof end === 'number' ? end : characters.length;\n\tlet isInsideEscape = false;\n\tlet ansiCode;\n\tlet visible = 0;\n\tlet output = '';\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tlet leftEscape = false;\n\n\t\tif (ESCAPES.includes(character)) {\n\t\t\tconst code = /\\d[^m]*/.exec(string.slice(index, index + 18));\n\t\t\tansiCode = code && code.length > 0 ? code[0] : undefined;\n\n\t\t\tif (visible < stringEnd) {\n\t\t\t\tisInsideEscape = true;\n\n\t\t\t\tif (ansiCode !== undefined) {\n\t\t\t\t\tansiCodes.push(ansiCode);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isInsideEscape && character === 'm') {\n\t\t\tisInsideEscape = false;\n\t\t\tleftEscape = true;\n\t\t}\n\n\t\tif (!isInsideEscape && !leftEscape) {\n\t\t\tvisible++;\n\t\t}\n\n\t\tif (!astralRegex.test(character) && isFullwidthCodePoint(character.codePointAt())) {\n\t\t\tvisible++;\n\n\t\t\tif (typeof end !== 'number') {\n\t\t\t\tstringEnd++;\n\t\t\t}\n\t\t}\n\n\t\tif (visible > begin && visible <= stringEnd) {\n\t\t\toutput += character;\n\t\t} else if (visible === begin && !isInsideEscape && ansiCode !== undefined) {\n\t\t\toutput = checkAnsi(ansiCodes);\n\t\t} else if (visible >= stringEnd) {\n\t\t\toutput += checkAnsi(ansiCodes, true, ansiCode);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn output;\n}\n","/* eslint-disable yoda */\n\nexport default function isFullwidthCodePoint(codePoint) {\n\tif (!Number.isInteger(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// https://unicode.org/Public/UNIDATA/EastAsianWidth.txt\n\treturn codePoint >= 0x1100 && (\n\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t// Hangul Jamo Extended-A\n\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t// Hangul Syllables\n\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t// CJK Compatibility Ideographs\n\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t// Vertical Forms\n\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t// Halfwidth and Fullwidth Forms\n\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t// Kana Supplement\n\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t// Enclosed Ideographic Supplement\n\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t);\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t    '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n  window.eastasianwidth = eaw;\n} else {\n  module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n  var x = character.charCodeAt(0);\n  var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n  var codePoint = x;\n  if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n    x &= 0x3FF;\n    y &= 0x3FF;\n    codePoint = (x << 10) | y;\n    codePoint += 0x10000;\n  }\n\n  if ((0x3000 == codePoint) ||\n      (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n      (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n    return 'F';\n  }\n  if ((0x20A9 == codePoint) ||\n      (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n      (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n      (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n      (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n      (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n      (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n    return 'H';\n  }\n  if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n      (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n      (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n      (0x2329 <= codePoint && codePoint <= 0x232A) ||\n      (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n      (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n      (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n      (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n      (0x3001 <= codePoint && codePoint <= 0x303E) ||\n      (0x3041 <= codePoint && codePoint <= 0x3096) ||\n      (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n      (0x3105 <= codePoint && codePoint <= 0x312D) ||\n      (0x3131 <= codePoint && codePoint <= 0x318E) ||\n      (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n      (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n      (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n      (0x3220 <= codePoint && codePoint <= 0x3247) ||\n      (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n      (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n      (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n      (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n      (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n      (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n      (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n      (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n      (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n      (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n      (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n      (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n      (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n      (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n      (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n      (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n      (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n      (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n      (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n      (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n      (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n    return 'W';\n  }\n  if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n      (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n      (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n      (0x00AC == codePoint) ||\n      (0x00AF == codePoint) ||\n      (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n      (0x2985 <= codePoint && codePoint <= 0x2986)) {\n    return 'Na';\n  }\n  if ((0x00A1 == codePoint) ||\n      (0x00A4 == codePoint) ||\n      (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n      (0x00AA == codePoint) ||\n      (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n      (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n      (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n      (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n      (0x00C6 == codePoint) ||\n      (0x00D0 == codePoint) ||\n      (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n      (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n      (0x00E6 == codePoint) ||\n      (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n      (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n      (0x00F0 == codePoint) ||\n      (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n      (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n      (0x00FC == codePoint) ||\n      (0x00FE == codePoint) ||\n      (0x0101 == codePoint) ||\n      (0x0111 == codePoint) ||\n      (0x0113 == codePoint) ||\n      (0x011B == codePoint) ||\n      (0x0126 <= codePoint && codePoint <= 0x0127) ||\n      (0x012B == codePoint) ||\n      (0x0131 <= codePoint && codePoint <= 0x0133) ||\n      (0x0138 == codePoint) ||\n      (0x013F <= codePoint && codePoint <= 0x0142) ||\n      (0x0144 == codePoint) ||\n      (0x0148 <= codePoint && codePoint <= 0x014B) ||\n      (0x014D == codePoint) ||\n      (0x0152 <= codePoint && codePoint <= 0x0153) ||\n      (0x0166 <= codePoint && codePoint <= 0x0167) ||\n      (0x016B == codePoint) ||\n      (0x01CE == codePoint) ||\n      (0x01D0 == codePoint) ||\n      (0x01D2 == codePoint) ||\n      (0x01D4 == codePoint) ||\n      (0x01D6 == codePoint) ||\n      (0x01D8 == codePoint) ||\n      (0x01DA == codePoint) ||\n      (0x01DC == codePoint) ||\n      (0x0251 == codePoint) ||\n      (0x0261 == codePoint) ||\n      (0x02C4 == codePoint) ||\n      (0x02C7 == codePoint) ||\n      (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n      (0x02CD == codePoint) ||\n      (0x02D0 == codePoint) ||\n      (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n      (0x02DD == codePoint) ||\n      (0x02DF == codePoint) ||\n      (0x0300 <= codePoint && codePoint <= 0x036F) ||\n      (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n      (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n      (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n      (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n      (0x0401 == codePoint) ||\n      (0x0410 <= codePoint && codePoint <= 0x044F) ||\n      (0x0451 == codePoint) ||\n      (0x2010 == codePoint) ||\n      (0x2013 <= codePoint && codePoint <= 0x2016) ||\n      (0x2018 <= codePoint && codePoint <= 0x2019) ||\n      (0x201C <= codePoint && codePoint <= 0x201D) ||\n      (0x2020 <= codePoint && codePoint <= 0x2022) ||\n      (0x2024 <= codePoint && codePoint <= 0x2027) ||\n      (0x2030 == codePoint) ||\n      (0x2032 <= codePoint && codePoint <= 0x2033) ||\n      (0x2035 == codePoint) ||\n      (0x203B == codePoint) ||\n      (0x203E == codePoint) ||\n      (0x2074 == codePoint) ||\n      (0x207F == codePoint) ||\n      (0x2081 <= codePoint && codePoint <= 0x2084) ||\n      (0x20AC == codePoint) ||\n      (0x2103 == codePoint) ||\n      (0x2105 == codePoint) ||\n      (0x2109 == codePoint) ||\n      (0x2113 == codePoint) ||\n      (0x2116 == codePoint) ||\n      (0x2121 <= codePoint && codePoint <= 0x2122) ||\n      (0x2126 == codePoint) ||\n      (0x212B == codePoint) ||\n      (0x2153 <= codePoint && codePoint <= 0x2154) ||\n      (0x215B <= codePoint && codePoint <= 0x215E) ||\n      (0x2160 <= codePoint && codePoint <= 0x216B) ||\n      (0x2170 <= codePoint && codePoint <= 0x2179) ||\n      (0x2189 == codePoint) ||\n      (0x2190 <= codePoint && codePoint <= 0x2199) ||\n      (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n      (0x21D2 == codePoint) ||\n      (0x21D4 == codePoint) ||\n      (0x21E7 == codePoint) ||\n      (0x2200 == codePoint) ||\n      (0x2202 <= codePoint && codePoint <= 0x2203) ||\n      (0x2207 <= codePoint && codePoint <= 0x2208) ||\n      (0x220B == codePoint) ||\n      (0x220F == codePoint) ||\n      (0x2211 == codePoint) ||\n      (0x2215 == codePoint) ||\n      (0x221A == codePoint) ||\n      (0x221D <= codePoint && codePoint <= 0x2220) ||\n      (0x2223 == codePoint) ||\n      (0x2225 == codePoint) ||\n      (0x2227 <= codePoint && codePoint <= 0x222C) ||\n      (0x222E == codePoint) ||\n      (0x2234 <= codePoint && codePoint <= 0x2237) ||\n      (0x223C <= codePoint && codePoint <= 0x223D) ||\n      (0x2248 == codePoint) ||\n      (0x224C == codePoint) ||\n      (0x2252 == codePoint) ||\n      (0x2260 <= codePoint && codePoint <= 0x2261) ||\n      (0x2264 <= codePoint && codePoint <= 0x2267) ||\n      (0x226A <= codePoint && codePoint <= 0x226B) ||\n      (0x226E <= codePoint && codePoint <= 0x226F) ||\n      (0x2282 <= codePoint && codePoint <= 0x2283) ||\n      (0x2286 <= codePoint && codePoint <= 0x2287) ||\n      (0x2295 == codePoint) ||\n      (0x2299 == codePoint) ||\n      (0x22A5 == codePoint) ||\n      (0x22BF == codePoint) ||\n      (0x2312 == codePoint) ||\n      (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n      (0x24EB <= codePoint && codePoint <= 0x254B) ||\n      (0x2550 <= codePoint && codePoint <= 0x2573) ||\n      (0x2580 <= codePoint && codePoint <= 0x258F) ||\n      (0x2592 <= codePoint && codePoint <= 0x2595) ||\n      (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n      (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n      (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n      (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n      (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n      (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n      (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n      (0x25CB == codePoint) ||\n      (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n      (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n      (0x25EF == codePoint) ||\n      (0x2605 <= codePoint && codePoint <= 0x2606) ||\n      (0x2609 == codePoint) ||\n      (0x260E <= codePoint && codePoint <= 0x260F) ||\n      (0x2614 <= codePoint && codePoint <= 0x2615) ||\n      (0x261C == codePoint) ||\n      (0x261E == codePoint) ||\n      (0x2640 == codePoint) ||\n      (0x2642 == codePoint) ||\n      (0x2660 <= codePoint && codePoint <= 0x2661) ||\n      (0x2663 <= codePoint && codePoint <= 0x2665) ||\n      (0x2667 <= codePoint && codePoint <= 0x266A) ||\n      (0x266C <= codePoint && codePoint <= 0x266D) ||\n      (0x266F == codePoint) ||\n      (0x269E <= codePoint && codePoint <= 0x269F) ||\n      (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n      (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n      (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n      (0x26E3 == codePoint) ||\n      (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n      (0x273D == codePoint) ||\n      (0x2757 == codePoint) ||\n      (0x2776 <= codePoint && codePoint <= 0x277F) ||\n      (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n      (0x3248 <= codePoint && codePoint <= 0x324F) ||\n      (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n      (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n      (0xFFFD == codePoint) ||\n      (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n      (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n      (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n      (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n      (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n      (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n      (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n    return 'A';\n  }\n\n  return 'N';\n};\n\neaw.characterLength = function(character) {\n  var code = this.eastAsianWidth(character);\n  if (code == 'F' || code == 'W' || code == 'A') {\n    return 2;\n  } else {\n    return 1;\n  }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n  return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n  var characters = stringToArray(string);\n  var len = 0;\n  for (var i = 0; i < characters.length; i++) {\n    len = len + this.characterLength(characters[i]);\n  }\n  return len;\n};\n\neaw.slice = function(text, start, end) {\n  textLen = eaw.length(text)\n  start = start ? start : 0;\n  end = end ? end : 1;\n  if (start < 0) {\n      start = textLen + start;\n  }\n  if (end < 0) {\n      end = textLen + end;\n  }\n  var result = '';\n  var eawLen = 0;\n  var chars = stringToArray(text);\n  for (var i = 0; i < chars.length; i++) {\n    var char = chars[i];\n    var charLen = eaw.length(char);\n    if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n        if (eawLen + charLen <= end) {\n            result += char;\n        } else {\n            break;\n        }\n    }\n    eawLen += charLen;\n  }\n  return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n  // https://mths.be/emoji\n  return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), '  ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","import sliceAnsi from 'slice-ansi';\nimport stringWidth from 'string-width';\n\nfunction getIndexOfNearestSpace(string, wantedIndex, shouldSearchRight) {\n\tif (string.charAt(wantedIndex) === ' ') {\n\t\treturn wantedIndex;\n\t}\n\n\tfor (let index = 1; index <= 3; index++) {\n\t\tif (shouldSearchRight) {\n\t\t\tif (string.charAt(wantedIndex + index) === ' ') {\n\t\t\t\treturn wantedIndex + index;\n\t\t\t}\n\t\t} else if (string.charAt(wantedIndex - index) === ' ') {\n\t\t\treturn wantedIndex - index;\n\t\t}\n\t}\n\n\treturn wantedIndex;\n}\n\nexport default function cliTruncate(text, columns, options) {\n\toptions = {\n\t\tposition: 'end',\n\t\tpreferTruncationOnSpace: false,\n\t\ttruncationCharacter: '…',\n\t\t...options,\n\t};\n\n\tconst {position, space, preferTruncationOnSpace} = options;\n\tlet {truncationCharacter} = options;\n\n\tif (typeof text !== 'string') {\n\t\tthrow new TypeError(`Expected \\`input\\` to be a string, got ${typeof text}`);\n\t}\n\n\tif (typeof columns !== 'number') {\n\t\tthrow new TypeError(`Expected \\`columns\\` to be a number, got ${typeof columns}`);\n\t}\n\n\tif (columns < 1) {\n\t\treturn '';\n\t}\n\n\tif (columns === 1) {\n\t\treturn truncationCharacter;\n\t}\n\n\tconst length = stringWidth(text);\n\n\tif (length <= columns) {\n\t\treturn text;\n\t}\n\n\tif (position === 'start') {\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst nearestSpace = getIndexOfNearestSpace(text, length - columns + 1, true);\n\t\t\treturn truncationCharacter + sliceAnsi(text, nearestSpace, length).trim();\n\t\t}\n\n\t\tif (space === true) {\n\t\t\ttruncationCharacter += ' ';\n\t\t}\n\n\t\treturn truncationCharacter + sliceAnsi(text, length - columns + stringWidth(truncationCharacter), length);\n\t}\n\n\tif (position === 'middle') {\n\t\tif (space === true) {\n\t\t\ttruncationCharacter = ` ${truncationCharacter} `;\n\t\t}\n\n\t\tconst half = Math.floor(columns / 2);\n\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst spaceNearFirstBreakPoint = getIndexOfNearestSpace(text, half);\n\t\t\tconst spaceNearSecondBreakPoint = getIndexOfNearestSpace(text, length - (columns - half) + 1, true);\n\t\t\treturn sliceAnsi(text, 0, spaceNearFirstBreakPoint) + truncationCharacter + sliceAnsi(text, spaceNearSecondBreakPoint, length).trim();\n\t\t}\n\n\t\treturn (\n\t\t\tsliceAnsi(text, 0, half)\n\t\t\t\t+ truncationCharacter\n\t\t\t\t+ sliceAnsi(text, length - (columns - half) + stringWidth(truncationCharacter), length)\n\t\t);\n\t}\n\n\tif (position === 'end') {\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst nearestSpace = getIndexOfNearestSpace(text, columns - 1);\n\t\t\treturn sliceAnsi(text, 0, nearestSpace) + truncationCharacter;\n\t\t}\n\n\t\tif (space === true) {\n\t\t\ttruncationCharacter = ` ${truncationCharacter}`;\n\t\t}\n\n\t\treturn sliceAnsi(text, 0, columns - stringWidth(truncationCharacter)) + truncationCharacter;\n\t}\n\n\tthrow new Error(`Expected \\`options.position\\` to be either \\`start\\`, \\`middle\\` or \\`end\\`, got ${position}`);\n}\n","export const cliSymbols = {\n  arrowUp: '↑',\n  arrowRight: '→',\n  arrowBottom: '↓',\n  enter: '↳',\n  cross: '×',\n  longDash: '─',\n  longArrowRight: '⇢',\n  more: '…',\n  pointer: '❯',\n  pointerSmall: '›',\n  pointerSmallDouble: '»'\n};\n\nexport const cliColumns = process.stdout.columns || 80;\n","import { fromLength, sum } from '@neodx/std';\n\n// eslint-disable-next-line @typescript-eslint/prefer-includes\nexport const getNewLineLength = (source: string): number => (/\\r\\n/.test(source) ? 2 : 1);\n\nexport function getPointerOffset(source: string, lineNumber: number, columnNumber: number): number {\n  const lines = source.split(newlineRe);\n\n  if (lineNumber > lines.length) {\n    return source.length;\n  }\n  const newLineLength = getNewLineLength(source);\n\n  return sum(fromLength(lineNumber - 1, no => lines[no]!.length + newLineLength)) + columnNumber;\n}\n\nexport const newlineRe = /\\r?\\n/;\n","import { type Colors, colors as defaultColors } from '@neodx/colors';\nimport { sum } from '@neodx/std';\nimport cliTruncate from 'cli-truncate';\nimport { cliColumns } from '../shared';\nimport { getNewLineLength, getPointerOffset, newlineRe } from './source-map';\n\nexport interface PrintCodeFrameOptions {\n  colors?: Colors;\n  source: string;\n  indent?: number;\n  lineNumber: number;\n  columnNumber: number;\n  overscan?: number;\n}\n\nexport function printCodeFrame({\n  colors = defaultColors,\n  indent = 0,\n  columnNumber,\n  lineNumber,\n  source,\n  overscan = 2\n}: PrintCodeFrameOptions): string {\n  const newLineLength = getNewLineLength(source);\n  const pointerOffset = getPointerOffset(source, lineNumber, columnNumber);\n\n  const lines = source.split(newlineRe);\n  const lineOffset = sum(lines.slice(0, lineNumber).map(line => line.length + newLineLength));\n  const startIndex = Math.max(0, lineNumber - 1 - overscan);\n  const printedLines = lines.slice(startIndex, lineNumber + overscan);\n\n  if (printedLines.length === 0 || printedLines.some(isMinifiedCodeLike)) return '';\n\n  const printUnderline = (line: string, offset: number) =>\n    fillSpace(offset) + colors.red('^'.repeat(Math.max(1, line.length - offset)));\n  const printLineNo = (no = '') => colors.gray(`${no.padStart(3, ' ')}| `);\n\n  return printedLines\n    .flatMap((line, index) => {\n      const lineNo = startIndex + index + 1;\n      const isCurrentLine = lineNo === lineNumber;\n      const color = isCurrentLine ? colors.yellowBright : colors.yellow;\n\n      return [\n        cliTruncate(\n          printLineNo(String(lineNo)) + color(line.replace(/\\t/g, ' ')),\n          cliColumns - indent\n        ),\n        isCurrentLine &&\n          printLineNo() + printUnderline(line, pointerOffset - (lineOffset - line.length))\n      ];\n    })\n    .filter(Boolean)\n    .map(line => (indent ? fillSpace(indent) + line : line))\n    .join('\\n');\n}\n\n// to long, maybe it's a minified file, skip for codeframe\nconst isMinifiedCodeLike = (code: string) => code.length > 240;\nconst fillSpace = (length: number) => ' '.repeat(length);\n","import { identity } from '../shared';\n\ntype IteratorFn<T> = (index: number) => T;\n\nexport function fromLength(length: number): number[];\nexport function fromLength<T>(length: number, fn: IteratorFn<T>): T[];\nexport function fromLength<T>(length: number, fn: IteratorFn<T> = identity as IteratorFn<T>) {\n  return Array.from({ length }, (_, index) => fn(index));\n}\n\nexport function fromRange(start: number, end: number): number[];\nexport function fromRange<T>(start: number, end: number, fn: IteratorFn<T>): T[];\nexport function fromRange<T>(\n  start: number,\n  end: number,\n  fn: IteratorFn<T> = identity as IteratorFn<T>\n) {\n  if (start > end) [start, end] = [end, start];\n  return fromLength(end - start + 1, index => fn(index + start));\n}\n","import { isEmptyObject, omit } from '@neodx/std';\n\n/**\n * Serialize an error into a plain object that can be serialized into JSON then.\n */\nexport function serializeError(error: unknown) {\n  if (!(error instanceof Error)) return error;\n  const result: Record<string, unknown> = {\n    name: error.name,\n    stack: error.stack,\n    message: error.message,\n    ...(getErrorCustomProperties(error) ?? {})\n  };\n\n  if (error.cause instanceof Error) {\n    result.cause = serializeError(error.cause);\n  }\n\n  return result;\n}\n\nexport function getErrorCustomProperties(error: Error) {\n  const errorProperties = omit(Object.fromEntries(Object.entries(error)), builtInErrorProps);\n\n  return isEmptyObject(errorProperties) ? null : errorProperties;\n}\n\nconst builtInErrorProps = ['stack', 'cause', 'name', 'message'];\n","import { toInt } from '@neodx/std';\nimport { resolve } from 'pathe';\n\nexport interface ParsedStack {\n  file: string;\n  line: number;\n  method: string;\n  column: number;\n}\n\nexport const parseStackTraces = (\n  originalTrace: string,\n  filter: (trace: ParsedStack) => boolean = notInternals\n) =>\n  originalTrace\n    .split('\\n')\n    .map(parseSingleStack)\n    .filter((stack): stack is ParsedStack => stack !== null && filter(stack));\n\n// Based on https://github.com/stacktracejs/error-stack-parser\n// Credit to stacktracejs\nexport function parseSingleStack(raw: string): ParsedStack | null {\n  let line = raw.trim();\n\n  if (line.includes('(eval ')) {\n    line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(,.*$)/g, '');\n  }\n\n  let sanitizedLine = line\n    .replace(/^\\s+/, '')\n    .replace(/\\(eval code/g, '(')\n    .replace(/^.*?\\s+/, '');\n\n  // capture and preserve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n  // case it has spaces in it, as the string is split on \\s+ later on\n  const location = sanitizedLine.match(/ (\\(.+\\)$)/);\n\n  if (location) {\n    // remove the parenthesized location from the line, if it was matched\n    sanitizedLine = sanitizedLine.replace(location[0], '');\n  }\n\n  // if a location was matched, pass it to extractLocation() otherwise pass all sanitizedLine\n  // because this line doesn't have function name\n  const [url, lineNumber, columnNumber] = parseTraceLocation(\n    location ? location[1]! : sanitizedLine\n  );\n  let method = (location && sanitizedLine) || '';\n  let file = url && ['eval', '<anonymous>'].includes(url) ? undefined : url;\n\n  if (!file || !lineNumber || !columnNumber) return null;\n  if (method.startsWith('async ')) method = method.slice(6);\n  if (file.startsWith('file://')) file = file.slice(7);\n\n  return {\n    // normalize Windows path (\\ -> /)\n    file: resolve(file),\n    line: toInt(lineNumber),\n    column: toInt(columnNumber),\n    method\n  };\n}\n\nexport type TraceLocation = [url: string, line?: string, column?: string];\n\nexport function parseTraceLocation(urlLike: string): TraceLocation {\n  // Fail-fast but return locations like \"(native)\"\n  if (!urlLike.includes(':')) return [urlLike];\n\n  return (\n    (LOCATIONS_RE.exec(urlLike.replace(/^\\(|\\)$/g, ''))?.slice(1, 4) as TraceLocation) ?? [urlLike]\n  );\n}\n\nconst LOCATIONS_RE = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\nconst notInternals = (stack: ParsedStack) => !stack.file.match('node:internal');\n","import type { Colors } from '@neodx/colors';\nimport { colors as defaultColors } from '@neodx/colors';\nimport { isPrimitive, pick, toArray, True } from '@neodx/std';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { relative } from 'pathe';\nimport { serializeJSON } from '../../utils';\nimport { cliSymbols } from '../shared';\nimport { printCodeFrame } from './print-code-frame';\nimport { getErrorCustomProperties } from './serialize-error';\nimport { newlineRe } from './source-map';\nimport { type ParsedStack, parseStackTraces } from './stack-trace';\n\nexport interface PrintPrettyErrorOptions {\n  cwd?: string;\n  indent?: number;\n  colors?: Colors;\n  fullStack?: boolean;\n  codeFrame?: boolean | 'auto' | GetHighlightStacks;\n  stringify?: (value: unknown) => string;\n  filterStack?: (stack: ParsedStack) => boolean;\n}\n\nexport type GetHighlightStacks = (stacks: ParsedStack[]) => ParsedStack | ParsedStack[];\n\nexport function printPrettyError(originalError: unknown, options: PrintPrettyErrorOptions = {}) {\n  const {\n    cwd = process.cwd(),\n    indent = 0,\n    codeFrame = true,\n    fullStack = false,\n    stringify = value => serializeJSON(value, 2),\n    filterStack,\n    colors = defaultColors\n  } = options;\n  const getHighlightedStacks = codeFrame ? toCodeFrameCondition(codeFrame) : null;\n  const error = toError(originalError);\n\n  const stacks = parseStackTraces(error.stack || '', fullStack ? True : filterStack);\n  const errorProperties = getErrorCustomProperties(error);\n  const highlightedStacks = toArray(getHighlightedStacks?.(stacks) ?? []);\n  const prefix = (value = indent) => (value ? ' '.repeat(value) : '');\n\n  const messageParts = stacks.flatMap(stack => {\n    const { file, column, line, method } = stack;\n    const highlighted = highlightedStacks.includes(stack);\n    const color = highlighted ? colors.cyan : colors.gray;\n    const path = relative(cwd, file);\n\n    return [\n      color(\n        `${prefix()} ${colors.dim(\n          highlighted ? cliSymbols.pointerSmallDouble : cliSymbols.pointerSmall\n        )} ${[method, `${prefix()}${path}:${colors.dim(`${line}:${column}`)}`]\n          .filter(Boolean)\n          .join(' ')}`\n      ),\n      highlighted &&\n        colors.yellow(\n          printCodeFrame({\n            lineNumber: line,\n            columnNumber: column,\n            source: readFileSync(file, 'utf-8'),\n            indent: indent + 3,\n            colors\n          })\n        )\n    ];\n  });\n\n  if (errorProperties) {\n    messageParts.push(\n      `${prefix()}${colors.red(`${cliSymbols.longArrowRight} serialized error properties:`)}`,\n      `${colors.gray(\n        stringify(errorProperties)\n          .split(newlineRe)\n          .map(line => `${prefix()}${line}`)\n          .slice(1, -1)\n          .join('\\n')\n      )}`\n    );\n  }\n\n  if (error.cause && typeof error.cause === 'object' && 'name' in error.cause) {\n    error.cause.name = `${cliSymbols.enter} caused by ${error.cause.name}`;\n\n    messageParts.push(\n      ' ',\n      printPrettyError(error.cause, {\n        ...options,\n        indent: indent + 2,\n        codeFrame: false\n      })\n    );\n  }\n\n  return [\n    colors.red(`${prefix()}${colors.bold(error.name || 'Unknown Error')}: ${error.message}`),\n    ...messageParts\n  ]\n    .filter(Boolean)\n    .join('\\n');\n}\n\nconst toCodeFrameCondition = (codeFrame: true | 'auto' | GetHighlightStacks): GetHighlightStacks =>\n  typeof codeFrame === 'function'\n    ? codeFrame\n    : stacks => stacks.find(stack => existsSync(stack.file))!;\n\nconst toError = (error?: unknown) => {\n  if (!error) {\n    return pick(new Error('unknown error'), ['message', 'stack']) as Error;\n  }\n  if (isPrimitive(error)) {\n    const stack = String(error);\n\n    return {\n      message: stack.split(/\\n/g)[0],\n      stack\n    } as Error;\n  }\n  return error as Error;\n};\n","import { hasOwn } from '@neodx/std';\nimport type { LoggerBaseMeta } from '../core/types';\nimport { serializeHttpRequest, serializeHttpResponse } from '../http/utils';\nimport { serializeError } from './error';\n\nexport { serializeJSON } from '../utils/serialize-json';\nexport { serializeError, serializeHttpRequest, serializeHttpResponse };\n\nexport type LogSerializers = Record<string, LogSerializer>;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LogSerializer = (value: any) => any;\n\n// TODO https://linear.app/secundant/issue/SEC-42/neodxlog-top-level-serializers-api\nexport function serializeMeta(meta: LoggerBaseMeta, serializers?: LogSerializers) {\n  if (!serializers) return meta;\n  const result = {} as LoggerBaseMeta;\n\n  for (const [key, value] of Object.entries(meta)) {\n    result[key] = hasOwn(serializers, key) ? serializers[key]!(value) : value;\n  }\n  return result;\n}\n\nexport const DEFAULT_SERIALIZERS: LogSerializers = {\n  req: serializeHttpRequest,\n  res: serializeHttpResponse,\n  err: serializeError\n};\n","import { createWriteStream, type PathLike } from 'node:fs';\nimport type { Writable } from 'node:stream';\nimport type { LogChunk } from '../core/types';\nimport {\n  DEFAULT_SERIALIZERS,\n  type LogSerializers,\n  serializeError,\n  serializeJSON,\n  serializeMeta\n} from './serializers';\n\nexport interface JsonTargetParams {\n  target?: Writable | ((...args: unknown[]) => void);\n  dateKey?: string;\n  errorKey?: string;\n  messageKey?: string;\n  serializers?: LogSerializers;\n  levelValueKey?: string;\n}\n\nexport function file(filename: PathLike, options?: Omit<JsonTargetParams, 'target'>) {\n  return json({\n    target: createWriteStream(filename),\n    ...options\n  });\n}\n\nexport function json({\n  target = process.stdout,\n  dateKey = 'time',\n  errorKey = 'err',\n  messageKey = 'msg',\n  serializers = DEFAULT_SERIALIZERS,\n  levelValueKey = 'level'\n}: JsonTargetParams = {}) {\n  const write = 'writable' in target ? target.write.bind(target) : target;\n\n  return function handleLog({\n    msg,\n    error,\n    meta,\n    level,\n    name,\n    date,\n    __: { levels }\n  }: LogChunk<string>) {\n    const info = Object.assign(\n      {\n        [levelValueKey]: levels[level],\n        [dateKey]: date.getTime(),\n        [errorKey]: error && serializeError(error),\n        [messageKey]: msg\n      },\n      name && { name },\n      serializeMeta(meta, serializers)\n    );\n\n    write(serializeJSON(info) + '\\n');\n  };\n}\n","import { type ColorName, type Colors, colors as defaultColors } from '@neodx/colors';\nimport {\n  type Falsy,\n  hasOwn,\n  identity,\n  isEmpty,\n  isObject,\n  keys,\n  memoizeWeak,\n  omit,\n  values\n} from '@neodx/std';\nimport type { DefaultLoggerLevel } from '../core/shared';\nimport type { LogChunk } from '../core/types';\nimport { printPrettyError, type PrintPrettyErrorOptions } from './error';\nimport type { LogSerializers } from './serializers';\nimport { DEFAULT_SERIALIZERS, serializeJSON, serializeMeta } from './serializers';\nimport { cliSymbols } from './shared';\n\nexport interface PrettyTargetParams<Level extends string> {\n  /**\n   * Default handler for log messages without errors.\n   */\n  log?(...args: unknown[]): void;\n\n  /**\n   * Default handler for log messages with errors (e.g. `logger.error(new Error(), 'message')`).\n   */\n  logError?(...args: unknown[]): void;\n  /**\n   * Custom implementation of colors from `@neodx/colors` or other libraries with same contracts.\n   * @example `createColors(false, false)` - disable colors completely\n   */\n  colors?: Colors;\n  // Possible feature for future versions\n  // underline?: boolean;\n  /**\n   * Display milliseconds in log message (e.g. `12:34:56.789`).\n   * Works only if `displayTime` is `true`.\n   */\n  displayMs?: boolean;\n  serializers?: LogSerializers;\n  /**\n   * Display time in a log message\n   */\n  displayTime?: boolean;\n  /**\n   * Display log level in log message.\n   */\n  displayLevel?: boolean;\n\n  prettyErrors?: boolean | Partial<PrintPrettyErrorOptions>;\n\n  levelColors?: Partial<Record<Level, ColorName>> | null;\n  levelBadges?: Partial<Record<Level, string>> | null;\n}\n\n/**\n * Creates a pretty log handler for development mode in node.\n */\nexport function pretty<const Level extends string>({\n  // eslint-disable-next-line no-console\n  log = console.log,\n  logError = console.error,\n  colors = defaultColors,\n  displayMs = false,\n  serializers = DEFAULT_SERIALIZERS,\n  displayTime = true,\n  displayLevel = true,\n  prettyErrors = true,\n  levelColors = defaultLevelColors as any,\n  levelBadges = defaultLevelBadges as any\n}: PrettyTargetParams<Level> = {}) {\n  const getLevelSetting = <T>(\n    settings: Partial<Record<Level, T>> | null | false,\n    level: Level\n  ): T | null => (settings && hasOwn(settings, level) ? settings[level]! : null);\n  const maxBadgesLength = levelBadges\n    ? Math.max(...values(levelBadges).map(b => String(b).length))\n    : 0;\n  const prettyErrorCustomOptions: PrintPrettyErrorOptions = {\n    colors,\n    ...(isObject(prettyErrors) ? prettyErrors : {})\n  };\n\n  return function prettyHandler(chunk: LogChunk<Level>) {\n    const {\n      name,\n      date,\n      msg,\n      meta,\n      error,\n      level: resolvedLevel,\n      __: { levels, originalLevel: level }\n    } = chunk;\n\n    // In `prettyErrors` mode, we will display error in a more readable way\n    const possibleLabelFromError = prettyErrors ? null : error?.name;\n    const userDefinedMessage = prettyErrors && msg === error?.message ? null : msg;\n\n    const maxLevelLength = getMaxObjectKeysLength(levels);\n    const label = (possibleLabelFromError ?? level.toLowerCase()).padEnd(1);\n    const badge = getLevelSetting(levelBadges, level);\n    const levelColorName =\n      getLevelSetting(levelColors, level) ?? getLevelSetting(levelColors, resolvedLevel);\n    const levelColorFn = levelColorName ? colors[levelColorName] : identity;\n\n    const visibleMeta = omit(meta, ['pid', 'hostname']);\n\n    const fullLabel = mergeString([badge?.padEnd(maxBadgesLength), label]);\n    const firstPart = mergeString([\n      name && colors.gray(`[${name.split(':').join(nameDelimiter)}]`),\n      displayLevel && levelColorFn(fullLabel.padEnd(maxLevelLength + maxBadgesLength))\n    ]);\n\n    const haveVisibleMeta = !isEmpty(keys(visibleMeta));\n    const formatter = displayMs ? withMs : withoutMs;\n    const formatted = mergeString([\n      displayTime && colors.gray(formatter.format(date)),\n      firstPart,\n      userDefinedMessage,\n      haveVisibleMeta && serializeJSON(serializeMeta(visibleMeta, serializers), 2)\n    ]);\n\n    if (error) {\n      const [_, ...stackBody] = error.stack?.toString().split('\\n') ?? [];\n\n      if (prettyErrors) {\n        const shouldPrintErrorInAdditionalLine = userDefinedMessage || haveVisibleMeta;\n        const postfix = error instanceof Error ? '\\n' : '';\n\n        if (shouldPrintErrorInAdditionalLine) {\n          logError(formatted, '\\n', printPrettyError(error, prettyErrorCustomOptions), postfix);\n        } else {\n          logError(formatted, printPrettyError(error, prettyErrorCustomOptions), postfix);\n        }\n      } else {\n        logError(formatted, colors.gray(stackBody.map(line => line.replace(/^/, '\\n')).join('')));\n      }\n    } else {\n      log(formatted);\n    }\n  };\n}\n\nconst mergeString = (parts: Array<string | Falsy>): string => parts.filter(Boolean).join(' ');\nconst getMaxObjectKeysLength = memoizeWeak((levels: object) =>\n  Math.max(...Object.keys(levels).map(level => level.length))\n);\n\nconst nameDelimiter = ` ${cliSymbols.pointerSmall} `;\nconst defaultLevelBadges = {\n  info: '◌',\n  done: '✔',\n  warn: '⚠',\n  error: '✘',\n  debug: '⚙'\n} as Partial<Record<DefaultLoggerLevel, string>>;\n\nconst defaultLevelColors = {\n  info: 'cyanBright',\n  warn: 'yellowBright',\n  done: 'greenBright',\n  debug: 'blueBright',\n  error: 'red',\n  verbose: 'bold'\n} as Partial<Record<DefaultLoggerLevel, ColorName>>;\n\npretty.defaultBadges = defaultLevelBadges;\npretty.defaultColors = defaultLevelColors;\n\nconst formatOptions: Intl.DateTimeFormatOptions = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  hour12: false\n};\n\nconst withMs = new Intl.DateTimeFormat('en-US', {\n  ...formatOptions,\n  fractionalSecondDigits: 3\n});\nconst withoutMs = new Intl.DateTimeFormat('en-US', {\n  ...formatOptions\n});\n","export function memoizeWeak<Input extends object, Output>(fn: (input: Input) => Output) {\n  return memoize(fn, {\n    cache: new WeakMap()\n  });\n}\n\nexport function memoize<Input, Output>(\n  fn: (input: Input) => Output,\n  {\n    cache = new Map<Input, Output>()\n  }: {\n    cache?: {\n      has(input: Input): boolean;\n      get(input: Input): Output | undefined;\n      set(input: Input, value: Output): void;\n    };\n  } = {}\n) {\n  return (input: Input) => {\n    if (!cache.has(input)) {\n      cache.set(input, fn(input));\n    }\n    return cache.get(input)!;\n  };\n}\n","import { hostname } from 'node:os';\nimport { createLoggerFactory, type CreateLoggerFactoryParams } from '../core/create-logger-factory';\nimport {\n  DEFAULT_LOGGER_LEVELS,\n  DEFAULT_LOGGER_PARAMS,\n  type DefaultLoggerLevel,\n  LOGGER_SILENT_LEVEL\n} from '../core/shared';\nimport { printf, readArguments } from '../utils';\nimport { createLoggerAutoFactory } from '../utils/create-auto-logger-factory.ts';\nimport { file, json } from './json';\nimport { pretty } from './pretty';\n\nexport {\n  printCodeFrame,\n  type PrintCodeFrameOptions,\n  printPrettyError,\n  type PrintPrettyErrorOptions\n} from './error';\nexport type { JsonTargetParams } from './json';\nexport type { PrettyTargetParams } from './pretty';\n\nexport {\n  createLoggerFactory,\n  type CreateLoggerFactoryParams,\n  DEFAULT_LOGGER_LEVELS,\n  DEFAULT_LOGGER_PARAMS,\n  type DefaultLoggerLevel,\n  file,\n  json,\n  LOGGER_SILENT_LEVEL,\n  pretty\n};\n\nexport const NODE_LOGGER_SYSTEM_INFO = { pid: process.pid, hostname: hostname() };\n\nexport const createLogger = createLoggerFactory({\n  defaultParams: {\n    ...DEFAULT_LOGGER_PARAMS,\n    meta: NODE_LOGGER_SYSTEM_INFO,\n    target: process.env.NODE_ENV === 'production' ? json() : pretty()\n  },\n  formatMessage: printf,\n  readArguments\n});\nexport const createAutoLogger = createLoggerAutoFactory(createLogger);\n"],"names":["sum","values","reduce","acc","item","omit","obj","keys","fn","_","key","includes","Object","fromEntries","entries","filter","value","pick","target","truncateString","str","maxLength","suffix","length","slice","formatOutgoingMessageStatus","res","headersSent","statusCode","statusMessage","formatIncomingMessage","req","colors","delimiter","bold","method","toUpperCase","underline","gray","getIncomingMessageUrl","split","shift","formatResponseTime","time","showSeconds","timeValue","toLocaleString","style","unit","unitDisplay","maximumFractionDigits","padEnd","originalUrl","path","url","createRequestIdGenerator","currentRequestId","maxInt","HTTP_LOG_START_TIME_SYMBOL","Symbol","HTTP_LOG_RAW_SYMBOL","wrapAnsi16","offset","code","wrapAnsi256","wrapAnsi16m","red","green","blue","styles","modifier","reset","dim","italic","overline","inverse","hidden","strikethrough","color","black","yellow","magenta","cyan","white","blackBright","grey","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright","bgColor","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","bgBlackBright","bgGray","bgGrey","bgRedBright","bgGreenBright","bgYellowBright","bgBlueBright","bgMagentaBright","bgCyanBright","bgWhiteBright","ansiStyles","assembleStyles","codes","Map","groupName","group","styleName","open","close","set","defineProperty","enumerable","ansi","ansi256","ansi16m","defineProperties","rgbToAnsi256","Math","round","hexToRgb","hex","matches","exec","toString","colorString","map","character","join","integer","Number","parseInt","hexToAnsi256","ansi256ToAnsi","remainder","floor","max","result","rgbToAnsi","hexToAnsi","astralRegex","ESCAPES","wrapAnsi","checkAnsi","ansiCodes","isEscapes","endAnsiCode","output","ansiCode","ansiCodeOrigin","get","indexEscape","indexOf","push","splice","element","index","undefined","fistEscapeCode","current","next","sliceAnsi","string","begin","end","characters","stringEnd","isInsideEscape","visible","codePoint","leftEscape","test","isInteger","codePointAt","regex","ansiRegex","onlyFirst","RegExp","eaw","stringToArray","match","module","exports","eastAsianWidth","x","charCodeAt","y","characterLength","len","i","text","start","textLen","eawLen","chars","char","charLen","stringWidth","options","ambiguousIsNarrow","stripAnsi","TypeError","replace","emojiRegex","ambiguousCharacterWidth","width","getIndexOfNearestSpace","wantedIndex","shouldSearchRight","charAt","cliSymbols","enter","longArrowRight","pointerSmall","pointerSmallDouble","cliColumns","process","stdout","columns","getNewLineLength","source","newlineRe","printCodeFrame","defaultColors","indent","columnNumber","lineNumber","overscan","newLineLength","pointerOffset","getPointerOffset","lines","fromLength","identity","Array","from","no","lineOffset","line","startIndex","printedLines","some","isMinifiedCodeLike","printUnderline","fillSpace","repeat","printLineNo","padStart","flatMap","lineNo","isCurrentLine","cliTruncate","position","space","preferTruncationOnSpace","truncationCharacter","nearestSpace","trim","half","spaceNearFirstBreakPoint","spaceNearSecondBreakPoint","Error","String","Boolean","serializeError","error","name","stack","message","getErrorCustomProperties","cause","errorProperties","builtInErrorProps","isEmptyObject","parseStackTraces","originalTrace","notInternals","parseSingleStack","raw","urlLike","sanitizedLine","location","LOCATIONS_RE","file","startsWith","resolve","toInt","column","printPrettyError","originalError","cwd","codeFrame","fullStack","stringify","serializeJSON","filterStack","getHighlightedStacks","toCodeFrameCondition","toError","stacks","True","highlightedStacks","toArray","prefix","messageParts","highlighted","relative","readFileSync","find","existsSync","isPrimitive","serializeMeta","meta","serializers","hasOwn","DEFAULT_SERIALIZERS","id","info","query","params","headers","connection","socket","remotePort","remoteAddress","getHeaders","err","filename","json","createWriteStream","dateKey","errorKey","messageKey","levelValueKey","write","bind","msg","level","date","__","levels","assign","getTime","pretty","log","console","logError","displayMs","displayTime","displayLevel","prettyErrors","levelColors","defaultLevelColors","levelBadges","defaultLevelBadges","getLevelSetting","settings","maxBadgesLength","b","prettyErrorCustomOptions","isObject","chunk","resolvedLevel","originalLevel","possibleLabelFromError","userDefinedMessage","maxLevelLength","getMaxObjectKeysLength","label","toLowerCase","badge","levelColorName","levelColorFn","visibleMeta","fullLabel","mergeString","firstPart","nameDelimiter","haveVisibleMeta","isEmpty","formatter","withMs","withoutMs","formatted","format","stackBody","postfix","parts","memoize","cache","input","has","WeakMap","done","warn","debug","verbose","defaultBadges","formatOptions","hour","minute","second","hour12","Intl","DateTimeFormat","fractionalSecondDigits","NODE_LOGGER_SYSTEM_INFO","pid","hostname","createLogger","createLoggerFactory","defaultParams","DEFAULT_LOGGER_PARAMS","env","NODE_ENV","formatMessage","printf","readArguments","createAutoLogger","createLoggerAutoFactory"],"mappings":"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AUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GACV,MAAUA,GAAaA,GAAa,MACpC,OAAUA,GACV,OAAUA,GACV,OAAUA,GAAaA,GAAa,OACpC,OAAUA,GAAaA,GAAa,OACpC,OAAUA,GAAaA,GAAa,OACpC,OAAUA,GAAaA,GAAa,OACpC,OAAUA,GAAaA,GAAa,OACpC,OAAUA,GACV,QAAWA,GAAaA,GAAa,QACrC,QAAWA,GAAaA,GAAa,QACrC,QAAWA,GAAaA,GAAa,QACrC,QAAWA,GAAaA,GAAa,QACrC,QAAWA,GAAaA,GAAa,QACrC,QAAWA,GAAaA,GAAa,SACrC,SAAYA,GAAaA,GAAa,QAClC,IAGF,GACT,EAEAS,EAAIS,eAAe,CAAG,SAAS5D,CAAS,EACtC,IAAI3E,EAAO,IAAI,CAACmI,cAAc,CAACxD,SAC/B,AAAI3E,AAAQ,KAARA,GAAeA,AAAQ,KAARA,GAAeA,AAAQ,KAARA,EACzB,EAEA,CAEX,EAOA8H,EAAItK,MAAM,CAAG,SAASsJ,CAAM,EAG1B,IAAK,IAFDG,EAAac,EAAcjB,GAC3B0B,EAAM,EACDC,EAAI,EAAGA,EAAIxB,EAAWzJ,MAAM,CAAEiL,IACrCD,GAAY,IAAI,CAACD,eAAe,CAACtB,CAAU,CAACwB,EAAE,EAEhD,OAAOD,CACT,EAEAV,EAAIrK,KAAK,CAAG,SAASiL,CAAI,CAAEC,CAAK,CAAE3B,CAAG,EACnC4B,QAAUd,EAAItK,MAAM,CAACkL,GAErB1B,EAAMA,GAAY,EADlB2B,CAAAA,EAAQA,GAAgB,CAAA,EAEZ,GACRA,CAAAA,EAAQC,QAAUD,GAElB3B,EAAM,GACNA,CAAAA,EAAM4B,QAAU5B,GAKpB,IAAK,IAHD3B,EAAS,GACTwD,EAAS,EACTC,EAAQf,EAAcW,GACjBD,EAAI,EAAGA,EAAIK,EAAMtL,MAAM,CAAEiL,IAAK,CACrC,IAAIM,EAAOD,CAAK,CAACL,EAAE,CACfO,EAAUlB,EAAItK,MAAM,CAACuL,GACzB,GAAIF,GAAUF,EAASK,CAAAA,AAAW,GAAXA,EAAe,EAAI,CAAA,GACtC,GAAIH,EAASG,GAAWhC,EACpB3B,GAAU0D,OAEV,MAGRF,GAAUG,CACX,CACD,OAAO3D,CACT,6BCpTiB,WAEf,MAAO,gyeACT,GCDe,SAAS4D,EAAYnC,CAAM,CAAEoC,EAAU,EAAE,EACvD,GAAsB,UAAlB,OAAOpC,GAAuBA,AAAkB,IAAlBA,EAAOtJ,MAAM,GAI/C0L,EAAU,CACTC,kBAAmB,CAAA,EACnB,GAAGD,CAAO,AACX,EAIIpC,AAAkB,IAAlBA,AAFJA,CAAAA,EAASsC,AJVK,SAAmBtC,CAAM,EACvC,GAAI,AAAkB,UAAlB,OAAOA,EACV,MAAM,AAAIuC,UAAU,CAAC,6BAA6B,EAAE,OAAOvC,EAAO,EAAE,CAAC,EAMtE,OAAOA,EAAOwC,OAAO,CAAC5B,EAAO,GAC9B,EICoBZ,EAAAA,EAERtJ,MAAM,EAVhB,OAAO,EAcRsJ,EAASA,EAAOwC,OAAO,CAACC,IAAc,MAEtC,IAAMC,EAA0BN,EAAQC,iBAAiB,CAAG,EAAI,EAC5DM,EAAQ,EAEZ,IAAK,IAAM9E,KAAamC,EAAQ,CAC/B,IAAMO,EAAY1C,EAAU8C,WAAW,CAAC,GAGxC,IAAIJ,CAAAA,GAAa,EAAA,GAASA,CAAAA,CAAAA,CAAAA,GAAa,GAAA,IAAQA,CAAAA,GAAa,GAAA,CAAA,GAKxDA,CAAAA,CAAAA,CAAAA,GAAa,GAAA,IAASA,CAAAA,GAAa,MAKvC,OADac,EAAeA,cAAc,CAACxD,IAE1C,IAAK,IACL,IAAK,IACJ8E,GAAS,EACT,KACD,KAAK,IACJA,GAASD,EACT,KACD,SACCC,GAAS,CACX,CACD,CAEA,OAAOA,CACR,CClDA,SAASC,EAAuB5C,CAAM,CAAE6C,CAAW,CAAEC,CAAiB,EACrE,GAAI9C,AAA+B,MAA/BA,EAAO+C,MAAM,CAACF,GACjB,OAAOA,EAGR,IAAK,IAAInD,EAAQ,EAAGA,GAAS,EAAGA,IAC/B,GAAIoD,EACH,CAAA,GAAI9C,AAAuC,MAAvCA,EAAO+C,MAAM,CAACF,EAAcnD,GAC/B,OAAOmD,EAAcnD,CACtB,MACM,GAAIM,AAAuC,MAAvCA,EAAO+C,MAAM,CAACF,EAAcnD,GACtC,OAAOmD,EAAcnD,EAIvB,OAAOmD,CACR,CCnBO,IAAMG,GAAa,CAIxBC,MAAO,IAGPC,eAAgB,IAGhBC,aAAc,IACdC,mBAAoB,GACtB,EAEaC,GAAaC,QAAQC,MAAM,CAACC,OAAO,EAAI,GCXvCC,GAAmB,AAACC,GAA4B,OAAOjD,IAAI,CAACiD,GAAU,EAAI,EAa1EC,GAAY,QCDlB,SAASC,GAAe,CAC7BzM,OAAAA,EAAS0M,CAAa,CACtBC,OAAAA,EAAS,CAAC,CACVC,aAAAA,CAAY,CACZC,WAAAA,CAAU,CACVN,OAAAA,CAAM,CACNO,SAAAA,EAAW,CAAC,CACU,EACtB,IAAMC,EAAgBT,GAAiBC,GACjCS,EAAgBC,ADnBjB,SAA0BV,CAAc,CAAEM,CAAkB,CAAED,CAAoB,EACvF,IAAMM,EAAQX,EAAO/L,KAAK,CAACgM,IAE3B,GAAIK,EAAaK,EAAM3N,MAAM,CAC3B,OAAOgN,EAAOhN,MAAM,CAEtB,IAAMwN,EAAgBT,GAAiBC,GAEvC,OAAOvO,EAAImP,AEPN,SAAuB5N,CAAc,CAAEf,EAAoB4O,CAAyB,EACzF,OAAOC,MAAMC,IAAI,CAAC,CAAE/N,OAAAA,CAAU,EAAA,CAACd,EAAG8J,IAAU/J,EAAG+J,GACjD,EFKwBsE,EAAa,EAAGU,AAAAA,GAAML,CAAK,CAACK,EAAG,CAAEhO,MAAM,CAAGwN,IAAkBH,CACpF,ECUyCL,EAAQM,EAAYD,GAErDM,EAAQX,EAAO/L,KAAK,CAACgM,IACrBgB,EAAaxP,EAAIkP,EAAM1N,KAAK,CAAC,EAAGqN,GAAYpG,GAAG,CAACgH,AAAAA,GAAQA,EAAKlO,MAAM,CAAGwN,IACtEW,EAAazH,KAAKkB,GAAG,CAAC,EAAG0F,EAAa,EAAIC,GAC1Ca,EAAeT,EAAM1N,KAAK,CAACkO,EAAYb,EAAaC,GAE1D,GAAIa,AAAwB,IAAxBA,EAAapO,MAAM,EAAUoO,EAAaC,IAAI,CAACC,IAAqB,MAAO,GAE/E,IAAMC,EAAiB,CAACL,EAAc3L,IACpCiM,GAAUjM,GAAU9B,EAAOkC,GAAG,CAAC,IAAI8L,MAAM,CAAC/H,KAAKkB,GAAG,CAAC,EAAGsG,EAAKlO,MAAM,CAAGuC,KAChEmM,EAAc,CAACV,EAAK,EAAE,GAAKvN,EAAOM,IAAI,CAAC,CAAC,EAAEiN,EAAGW,QAAQ,CAAC,EAAG,KAAK,EAAE,CAAC,EAEvE,OAAOP,EACJQ,OAAO,CAAC,CAACV,EAAMlF,KACd,IAAM6F,EAASV,EAAanF,EAAQ,EAC9B8F,EAAgBD,IAAWvB,EAC3B/J,EAAQuL,EAAgBrO,EAAOwD,YAAY,CAAGxD,EAAOgD,MAAM,CAEjE,MAAO,CACLsL,AHvBO,SAAqB7D,CAAI,CAAE4B,CAAO,CAAEpB,CAAO,EAQzD,GAAM,CAACsD,SAAAA,CAAQ,CAAEC,MAAAA,CAAK,CAAEC,wBAAAA,CAAuB,CAAC,CAPhDxD,EAAU,CACTsD,SAAU,MACVE,wBAAyB,CAAA,EACzBC,oBAAqB,IACrB,GAAGzD,CAAO,AACX,EAGI,CAACyD,oBAAAA,CAAmB,CAAC,CAAGzD,EAE5B,GAAI,AAAgB,UAAhB,OAAOR,EACV,MAAM,AAAIW,UAAU,CAAC,uCAAuC,EAAE,OAAOX,EAAK,CAAC,EAG5E,GAAI,AAAmB,UAAnB,OAAO4B,EACV,MAAM,AAAIjB,UAAU,CAAC,yCAAyC,EAAE,OAAOiB,EAAQ,CAAC,EAGjF,GAAIA,EAAU,EACb,MAAO,GAGR,GAAIA,AAAY,IAAZA,EACH,OAAOqC,EAGR,IAAMnP,EAASyL,EAAYP,GAE3B,GAAIlL,GAAU8M,EACb,OAAO5B,EAGR,GAAI8D,AAAa,UAAbA,EAAsB,CACzB,GAAIE,EAAyB,CAC5B,IAAME,EAAelD,EAAuBhB,EAAMlL,EAAS8M,EAAU,EAAG,CAAA,GACxE,OAAOqC,EAAsB9F,EAAU6B,EAAMkE,EAAcpP,GAAQqP,IAAI,EACxE,CAMA,MAJc,CAAA,IAAVJ,GACHE,CAAAA,GAAuB,GAAA,EAGjBA,EAAsB9F,EAAU6B,EAAMlL,EAAS8M,EAAUrB,EAAY0D,GAAsBnP,EACnG,CAEA,GAAIgP,AAAa,WAAbA,EAAuB,CACZ,CAAA,IAAVC,GACHE,CAAAA,EAAsB,CAAC,CAAC,EAAEA,EAAoB,CAAC,CAAC,AAAD,EAGhD,IAAMG,EAAO5I,KAAKiB,KAAK,CAACmF,EAAU,GAElC,GAAIoC,EAAyB,CAC5B,IAAMK,EAA2BrD,EAAuBhB,EAAMoE,GACxDE,EAA4BtD,EAAuBhB,EAAMlL,EAAU8M,CAAAA,EAAUwC,GAAQ,EAAG,CAAA,GAC9F,OAAOjG,EAAU6B,EAAM,EAAGqE,GAA4BJ,EAAsB9F,EAAU6B,EAAMsE,EAA2BxP,GAAQqP,IAAI,EACpI,CAEA,OACChG,EAAU6B,EAAM,EAAGoE,GAChBH,EACA9F,EAAU6B,EAAMlL,EAAU8M,CAAAA,EAAUwC,CAAAA,EAAQ7D,EAAY0D,GAAsBnP,EAEnF,CAEA,GAAIgP,AAAa,QAAbA,EAAoB,CACvB,GAAIE,EAAyB,CAC5B,IAAME,EAAelD,EAAuBhB,EAAM4B,EAAU,GAC5D,OAAOzD,EAAU6B,EAAM,EAAGkE,GAAgBD,CAC3C,CAMA,MAJc,CAAA,IAAVF,GACHE,CAAAA,EAAsB,CAAC,CAAC,EAAEA,EAAoB,CAAC,AAAD,EAGxC9F,EAAU6B,EAAM,EAAG4B,EAAUrB,EAAY0D,IAAwBA,CACzE,CAEA,MAAM,AAAIM,MAAM,CAAC,iFAAiF,EAAET,EAAS,CAAC,CAC/G,EGxDUN,EAAYgB,OAAOb,IAAWtL,EAAM2K,EAAKpC,OAAO,CAAC,MAAO,MACxDa,GAAaS,GAEf0B,GACEJ,IAAgBH,EAAeL,EAAMT,EAAiBQ,CAAAA,EAAaC,EAAKlO,MAAM,AAANA,GAC3E,AACH,GACCR,MAAM,CAACmQ,SACPzI,GAAG,CAACgH,AAAAA,GAASd,EAASoB,GAAUpB,GAAUc,EAAOA,GACjD9G,IAAI,CAAC,KACV,CAGA,IAAMkH,GAAqB,AAAC9L,GAAiBA,EAAKxC,MAAM,CAAG,IACrDwO,GAAY,AAACxO,GAAmB,IAAIyO,MAAM,CAACzO,GEtD1C,SAAS4P,GAAeC,CAAc,EAC3C,GAAI,CAAEA,CAAAA,aAAiBJ,OAAQ,OAAOI,EACtC,IAAMhI,EAAkC,CACtCiI,KAAMD,EAAMC,IAAI,CAChBC,MAAOF,EAAME,KAAK,CAClBC,QAASH,EAAMG,OAAO,CACtB,GAAIC,GAAyBJ,IAAU,CAAE,CAAA,AAC3C,EAMA,OAJIA,EAAMK,KAAK,YAAYT,OACzB5H,CAAAA,EAAOqI,KAAK,CAAGN,GAAeC,EAAMK,KAAK,CAAA,EAGpCrI,CACT,CAEO,SAASoI,GAAyBJ,CAAY,EACnD,IAAMM,EAAkBrR,EAAKO,OAAOC,WAAW,CAACD,OAAOE,OAAO,CAACsQ,IAASO,IAExE,OAAOC,EAAcF,GAAmB,KAAOA,CACjD,CAEA,IAAMC,GAAoB,CAAC,QAAS,QAAS,OAAQ,UAAU,CCjBlDE,GAAmB,CAC9BC,EACA/Q,EAA0CgR,EAAY,GAEtDD,EACGtP,KAAK,CAAC,MACNiG,GAAG,CAACuJ,IACJjR,MAAM,CAAC,AAACuQ,GAAgCA,AAAU,OAAVA,GAAkBvQ,EAAOuQ,IAI/D,SAASU,GAAiBC,CAAW,MA4CTC,EA3CjC,IAAIzC,EAAOwC,EAAIrB,IAAI,GAEfnB,EAAK9O,QAAQ,CAAC,WAChB8O,CAAAA,EAAOA,EAAKpC,OAAO,CAAC,aAAc,QAAQA,OAAO,CAAC,6BAA8B,GAAA,EAGlF,IAAI8E,EAAgB1C,EACjBpC,OAAO,CAAC,OAAQ,IAChBA,OAAO,CAAC,eAAgB,KACxBA,OAAO,CAAC,UAAW,IAIhB+E,EAAWD,EAAcpG,KAAK,CAAC,cAEjCqG,GAEFD,CAAAA,EAAgBA,EAAc9E,OAAO,CAAC+E,CAAQ,CAAC,EAAE,CAAE,GAAA,EAKrD,GAAM,CAAC9O,EAAKuL,EAAYD,EAAa,CAuBrC,AAAKsD,CAF4BA,EApB/BE,EAAWA,CAAQ,CAAC,EAAE,CAAID,GAsBfxR,QAAQ,CAAC,KAGnB0R,GAAa/J,IAAI,CAAC4J,EAAQ7E,OAAO,CAAC,WAAY,MAAM7L,MAAM,EAAG,IAAwB,CAAC0Q,EAAQ,CAH9D,CAACA,EAAQ,CApBxC/P,EAASiQ,GAAaD,GAAkB,GACxCG,EAAOhP,GAAO,CAAC,OAAQ,cAAc,CAAC3C,QAAQ,CAAC2C,GAAOkH,KAAAA,EAAYlH,SAEtE,AAAI,AAACgP,GAASzD,GAAeD,GACzBzM,EAAOoQ,UAAU,CAAC,WAAWpQ,CAAAA,EAASA,EAAOX,KAAK,CAAC,EAAA,EACnD8Q,EAAKC,UAAU,CAAC,YAAYD,CAAAA,EAAOA,EAAK9Q,KAAK,CAAC,EAAA,EAE3C,CAEL8Q,KAAME,EAAQF,GACd7C,KAAMgD,EAAM5D,GACZ6D,OAAQD,EAAM7D,GACdzM,OAAAA,CACF,GAVkD,IAWpD,CAaA,IAAMkQ,GAAe,+BACfN,GAAe,AAACT,GAAuB,CAACA,EAAMgB,IAAI,CAACvG,KAAK,CAAC,iBCnDxD,SAAS4G,GAAiBC,CAAsB,CAAE3F,EAAmC,EAAE,EAC5F,GAAM,CACJ4F,IAAAA,EAAM1E,QAAQ0E,GAAG,EAAE,CACnBlE,OAAAA,EAAS,CAAC,CACVmE,UAAAA,EAAY,CAAA,CAAI,CAChBC,UAAAA,EAAY,CAAA,CAAK,CACjBC,UAAAA,EAAYhS,AAAAA,GAASiS,EAAcjS,EAAO,EAAE,CAC5CkS,YAAAA,CAAW,QACXlR,EAAS0M,CAAa,CACvB,CAAGzB,EACEkG,EAAuBL,EAAYM,GAAqBN,GAAa,KACrE1B,EAAQiC,GAAQT,GAEhBU,EAASzB,GAAiBT,EAAME,KAAK,EAAI,GAAIyB,EAAYQ,EAAOL,GAChExB,EAAkBF,GAAyBJ,GAC3CoC,EAAoBC,EAAQN,IAAuBG,IAAW,EAAE,EAChEI,EAAS,CAAC1S,EAAQ2N,CAAM,GAAM3N,EAAQ,IAAIgP,MAAM,CAAChP,GAAS,GAE1D2S,EAAeL,EAAOnD,OAAO,CAACmB,AAAAA,IAClC,GAAM,CAAEgB,KAAAA,CAAI,CAAEI,OAAAA,CAAM,CAAEjD,KAAAA,CAAI,CAAEtN,OAAAA,CAAM,CAAE,CAAGmP,EACjCsC,EAAcJ,EAAkB7S,QAAQ,CAAC2Q,GACzCxM,EAAQ8O,EAAc5R,EAAOkD,IAAI,CAAGlD,EAAOM,IAAI,CAC/Ce,EAAOwQ,EAAShB,EAAKP,GAE3B,MAAO,CACLxN,EACE,CAAC,EAAE4O,IAAS,CAAC,EAAE1R,EAAOwC,GAAG,CACvBoP,EAAc/F,GAAWI,kBAAkB,CAAGJ,GAAWG,YAAY,EACrE,CAAC,EAAE,CAAC7L,EAAQ,CAAC,EAAEuR,IAAS,EAAErQ,EAAK,CAAC,EAAErB,EAAOwC,GAAG,CAAC,CAAC,EAAEiL,EAAK,CAAC,EAAEiD,EAAO,CAAC,EAAE,CAAC,CAAC,CACnE3R,MAAM,CAACmQ,SACPvI,IAAI,CAAC,KAAK,CAAC,EAEhBiL,GACE5R,EAAOgD,MAAM,CACXyJ,GAAe,CACbI,WAAYY,EACZb,aAAc8D,EACdnE,OAAQuF,EAAaxB,EAAM,SAC3B3D,OAAQA,EAAS,EACjB3M,OAAAA,CACF,IAEL,AACH,GA4BA,OA1BI0P,GACFiC,EAAavJ,IAAI,CACf,CAAC,EAAEsJ,IAAS,EAAE1R,EAAOkC,GAAG,CAAC,CAAC,EAAE2J,GAAWE,cAAc,CAAC,6BAA6B,CAAC,EAAE,CAAC,CACvF,CAAC,EAAE/L,EAAOM,IAAI,CACZ0Q,EAAUtB,GACPlP,KAAK,CAACgM,IACN/F,GAAG,CAACgH,AAAAA,GAAQ,CAAC,EAAEiE,IAAS,EAAEjE,EAAK,CAAC,EAChCjO,KAAK,CAAC,EAAG,IACTmH,IAAI,CAAC,OACR,CAAC,EAIHyI,EAAMK,KAAK,EAAI,AAAuB,UAAvB,OAAOL,EAAMK,KAAK,EAAiB,SAAUL,EAAMK,KAAK,GACzEL,EAAMK,KAAK,CAACJ,IAAI,CAAG,CAAC,EAAExD,GAAWC,KAAK,CAAC,WAAW,EAAEsD,EAAMK,KAAK,CAACJ,IAAI,CAAC,CAAC,CAEtEsC,EAAavJ,IAAI,CACf,IACAuI,GAAiBvB,EAAMK,KAAK,CAAE,CAC5B,GAAGxE,CAAO,CACV0B,OAAQA,EAAS,EACjBmE,UAAW,CAAA,CACb,KAIG,CACL9Q,EAAOkC,GAAG,CAAC,CAAC,EAAEwP,IAAS,EAAE1R,EAAOE,IAAI,CAACkP,EAAMC,IAAI,EAAI,iBAAiB,EAAE,EAAED,EAAMG,OAAO,CAAC,CAAC,KACpFoC,EACJ,CACE5S,MAAM,CAACmQ,SACPvI,IAAI,CAAC,KACV,CAEA,IAAMyK,GAAuB,AAACN,GAC5B,AAAqB,YAArB,OAAOA,EACHA,EACAQ,AAAAA,GAAUA,EAAOS,IAAI,CAACzC,AAAAA,GAAS0C,EAAW1C,EAAMgB,IAAI,GAEpDe,GAAU,AAACjC,IACf,GAAI,CAACA,EACH,OAAOnQ,EAAK,AAAI+P,MAAM,iBAAkB,CAAC,UAAW,QAAQ,EAE9D,GAAIiD,EAAY7C,GAAQ,CACtB,IAAME,EAAQL,OAAOG,GAErB,MAAO,CACLG,QAASD,EAAM9O,KAAK,CAAC,MAAM,CAAC,EAAE,CAC9B8O,MAAAA,CACF,CACF,CACA,OAAOF,CACT,EC5GO,SAAS8C,GAAcC,CAAoB,CAAEC,CAA4B,EAC9E,GAAI,CAACA,EAAa,OAAOD,EACzB,IAAM/K,EAAS,CAAA,EAEf,IAAK,GAAM,CAAC1I,EAAKM,EAAM,GAAIJ,OAAOE,OAAO,CAACqT,GACxC/K,CAAM,CAAC1I,EAAI,CAAG2T,EAAOD,EAAa1T,GAAO0T,CAAW,CAAC1T,EAAI,CAAEM,GAASA,EAEtE,OAAOoI,CACT,CAEO,IAAMkL,GAAsC,CACjDvS,IjBMK,SAA8BA,CAAoB,EACvD,GAAM,CAAEwS,GAAAA,CAAE,CAAEC,KAAAA,CAAI,CAAEC,MAAAA,CAAK,CAAEtS,OAAAA,CAAM,CAAEuS,OAAAA,CAAM,CAAEC,QAAAA,CAAO,CAAE,CAAC/Q,GAAsBqO,CAAG,CAAE,CAAGlQ,EAC3E6S,EAAaJ,GAAQzS,EAAI8S,MAAM,CAErC,MAAO,CACLN,GAAI,AAAc,YAAd,OAAOA,EAAoBA,IAAOA,GAAMC,GAAMD,GAClDjR,IAAKf,EAAsBR,GAC3B0S,MAAAA,EACAC,OAAAA,EACAvS,OAAAA,EACAwS,QAAAA,EACAG,WAAYF,GAAYE,WACxBC,cAAeH,GAAYG,cAC3B,CAACnR,EAAsBqO,CAAAA,GAAOlQ,CAChC,CACF,EiBpBEL,IjBsBK,SAA+BA,CAAoB,EACxD,MAAO,CACLE,WAAYF,EAAIC,WAAW,CAAGD,EAAaE,UAAU,CAAG,KACxD+S,QAASjT,EAAIsT,UAAU,GACvB,CAACpR,GAAsBlC,CACzB,CACF,EiB3BEuT,IAAK9D,EACP,ECPO,SAASmB,GAAK4C,CAAkB,CAAEjI,CAA0C,EACjF,OAAOkI,GAAK,CACVjU,OAAQkU,EAAkBF,GAC1B,GAAGjI,CAAO,AACZ,EACF,CAEO,SAASkI,GAAK,CACnBjU,OAAAA,EAASiN,QAAQC,MAAM,CACvBiH,QAAAA,EAAU,MAAM,CAChBC,SAAAA,EAAW,KAAK,CAChBC,WAAAA,EAAa,KAAK,CAClBnB,YAAAA,EAAcE,EAAmB,CACjCkB,cAAAA,EAAgB,OAAO,CACN,CAAG,EAAE,EACtB,IAAMC,EAAQ,aAAcvU,EAASA,EAAOuU,KAAK,CAACC,IAAI,CAACxU,GAAUA,EAEjE,OAAO,SAAmB,CACxByU,IAAAA,CAAG,CACHvE,MAAAA,CAAK,CACL+C,KAAAA,CAAI,CACJyB,MAAAA,CAAK,CACLvE,KAAAA,CAAI,CACJwE,KAAAA,CAAI,CACJC,GAAI,CAAEC,OAAAA,CAAM,CAAE,CACG,EAYjBN,EAAMxC,EAXOrS,OAAOoV,MAAM,CACxB,CACE,CAACR,EAAc,CAAEO,CAAM,CAACH,EAAM,CAC9B,CAACP,EAAAA,CAAUQ,EAAKI,OAAO,GACvB,CAACX,EAAWlE,CAAAA,GAASD,GAAeC,GACpC,CAACmE,GAAaI,CAChB,EACAtE,GAAQ,CAAEA,KAAAA,CAAK,EACf6C,GAAcC,EAAMC,KAGM,KAC9B,CACF,CCCO,SAAS8B,GAAmC,CAEjDC,IAAAA,EAAMC,QAAQD,GAAG,CACjBE,SAAAA,EAAWD,QAAQhF,KAAK,QACxBpP,EAAS0M,CAAa,CACtB4H,UAAAA,EAAY,CAAA,CAAK,CACjBlC,YAAAA,EAAcE,EAAmB,CACjCiC,YAAAA,EAAc,CAAA,CAAI,CAClBC,aAAAA,EAAe,CAAA,CAAI,CACnBC,aAAAA,EAAe,CAAA,CAAI,CACnBC,YAAAA,EAAcC,EAAyB,CACvCC,YAAAA,EAAcC,EAAyB,CACb,CAAG,CAAA,CAAE,EAC/B,IAAMC,EAAkB,CACtBC,EACAnB,IACcmB,GAAY1C,EAAO0C,EAAUnB,GAASmB,CAAQ,CAACnB,EAAM,CAAI,KACnEoB,EAAkBJ,EACpB3O,KAAKkB,GAAG,IAAIlJ,EAAO2W,GAAanO,GAAG,CAACwO,AAAAA,GAAKhG,OAAOgG,GAAG1V,MAAM,GACzD,EACE2V,EAAoD,CACxDlV,OAAAA,EACA,GAAImV,EAASV,GAAgBA,EAAe,CAAE,CAAA,AAChD,EAEA,OAAO,SAAuBW,CAAsB,EAClD,GAAM,CACJ/F,KAAAA,CAAI,CACJwE,KAAAA,CAAI,CACJF,IAAAA,CAAG,CACHxB,KAAAA,CAAI,CACJ/C,MAAAA,CAAK,CACLwE,MAAOyB,CAAa,CACpBvB,GAAI,CAAEC,OAAAA,CAAM,CAAEuB,cAAe1B,CAAK,CAAE,CACrC,CAAGwB,EAGEG,EAAyBd,EAAe,KAAOrF,GAAOC,KACtDmG,EAAqBf,GAAgBd,IAAQvE,GAAOG,QAAU,KAAOoE,EAErE8B,EAAiBC,GAAuB3B,GACxC4B,EAAQ,AAACJ,CAAAA,GAA0B3B,EAAMgC,WAAW,IAAIzU,MAAM,CAAC,GAC/D0U,EAAQf,EAAgBF,EAAahB,GACrCkC,EACJhB,EAAgBJ,EAAad,IAAUkB,EAAgBJ,EAAaW,GAChEU,EAAeD,EAAiB9V,CAAM,CAAC8V,EAAe,CAAG1I,EAEzD4I,EAAc3X,EAAK8T,EAAM,CAAC,MAAO,WAAW,EAE5C8D,EAAYC,GAAY,CAACL,GAAO1U,OAAO6T,GAAkBW,EAAM,EAC/DQ,EAAYD,GAAY,CAC5B7G,GAAQrP,EAAOM,IAAI,CAAC,CAAC,CAAC,EAAE+O,EAAK7O,KAAK,CAAC,KAAKmG,IAAI,CAACyP,IAAe,CAAC,CAAC,EAC9D5B,GAAgBuB,EAAaE,EAAU9U,MAAM,CAACsU,EAAiBT,IAChE,EAEKqB,EAAkB,CAACC,EAAQ/X,EAAKyX,IAChCO,EAAYjC,EAAYkC,GAASC,GACjCC,EAAYR,GAAY,CAC5B3B,GAAevU,EAAOM,IAAI,CAACiW,EAAUI,MAAM,CAAC9C,IAC5CsC,EACAX,EACAa,GAAmBpF,EAAciB,GAAc8D,EAAa5D,GAAc,GAC3E,EAED,GAAIhD,EAAO,CACT,GAAM,CAAC3Q,EAAG,GAAGmY,EAAU,CAAGxH,EAAME,KAAK,EAAE/I,WAAW/F,MAAM,OAAS,EAAE,CAEnE,GAAIiU,EAAc,CAEhB,IAAMoC,EAAUzH,aAAiBJ,MAAQ,KAAO,EADPwG,CAAAA,GAAsBa,EAI7DhC,EAASqC,EAAW,KAAM/F,GAAiBvB,EAAO8F,GAA2B2B,GAE7ExC,EAASqC,EAAW/F,GAAiBvB,EAAO8F,GAA2B2B,QAGzExC,EAASqC,EAAW1W,EAAOM,IAAI,CAACsW,EAAUnQ,GAAG,CAACgH,AAAAA,GAAQA,EAAKpC,OAAO,CAAC,IAAK,OAAO1E,IAAI,CAAC,WAGtFwN,EAAIuC,EAER,CACF,CAEA,IAAMR,GAAc,AAACY,GAAyCA,EAAM/X,MAAM,CAACmQ,SAASvI,IAAI,CAAC,KACnF+O,GCjJGqB,AAKF,SACLvY,CAA4B,CAC5B,CACEwY,MAAAA,EAAQ,IAAI7R,GAAoB,CAOjC,CAAG,EAAE,EAEN,OAAO,AAAC8R,IACDD,EAAME,GAAG,CAACD,IACbD,EAAMvR,GAAG,CAACwR,EAAOzY,EAAGyY,IAEfD,EAAM/O,GAAG,CAACgP,GAErB,ED0H2C,AAAClD,GAC1C9N,KAAKkB,GAAG,IAAIvI,OAAOL,IAAI,CAACwV,GAAQtN,GAAG,CAACmN,AAAAA,GAASA,EAAMrU,MAAM,GClJtC,CACjByX,MAAO,IAAIG,OACb,GDmJIf,GAAgB,CAAC,CAAC,EAAEvK,GAAWG,YAAY,CAAC,CAAC,CAAC,CAC9C6I,GAAqB,CACzBrC,KAAM,IACN4E,KAAM,IACNC,KAAM,IACNjI,MAAO,IACPkI,MAAO,GACT,EAEM3C,GAAqB,CACzBnC,KAAM,aACN6E,KAAM,eACND,KAAM,cACNE,MAAO,aACPlI,MAAO,MACPmI,QAAS,MACX,CAEArD,CAAAA,GAAOsD,aAAa,CAAG3C,GACvBX,GAAOxH,aAAa,CAAGiI,GAEvB,IAAM8C,GAA4C,CAChDC,KAAM,UACNC,OAAQ,UACRC,OAAQ,UACRC,OAAQ,CAAA,CACV,EAEMrB,GAAS,IAAIsB,KAAKC,cAAc,CAAC,QAAS,CAC9C,GAAGN,EAAa,CAChBO,uBAAwB,CAC1B,GACMvB,GAAY,IAAIqB,KAAKC,cAAc,CAAC,QAAS,CACjD,GAAGN,EAAa,AAClB,GEtJaQ,GAA0B,CAAEC,IAAK/L,QAAQ+L,GAAG,CAAEC,SAAUA,GAAW,EAEnEC,GAAeC,EAAoB,CAC9CC,cAAe,CACb,GAAGC,CAAqB,CACxBpG,KAAM8F,GACN/Y,OAAQiN,AAAyB,eAAzBA,QAAQqM,GAAG,CAACC,QAAQ,CAAoBtF,KAASe,IAC3D,EACAwE,cAAeC,EACfC,cAAAA,CACF,GACaC,GAAmBC,EAAwBV","x_google_ignoreList":[5,6,7,8,9,10,11,12,13]}