@gridsheet/react-core 2.0.5-0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Cell.d.ts +1 -2
- package/dist/components/Cell.d.ts.map +1 -1
- package/dist/components/CellStateOverlay.d.ts +8 -0
- package/dist/components/CellStateOverlay.d.ts.map +1 -0
- package/dist/components/Resizer.d.ts.map +1 -1
- package/dist/components/Tabular.d.ts.map +1 -1
- package/dist/index.js +411 -273
- package/dist/index.js.map +1 -1
- package/dist/lib/table.d.ts +5 -6
- package/dist/lib/table.d.ts.map +1 -1
- package/dist/lib/virtualization.d.ts.map +1 -1
- package/dist/store/actions.d.ts.map +1 -1
- package/dist/styles/minified.d.ts +2 -2
- package/dist/styles/minified.d.ts.map +1 -1
- package/dist/types.d.ts +4 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/constants.ts","../src/store/index.ts","../src/lib/converters.ts","../src/lib/structs.ts","../src/store/helpers.ts","../src/lib/virtualization.ts","../src/lib/operation.ts","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js","../src/formula/evaluator.ts","../src/lib/time.ts","../src/lib/autofill.ts","../src/store/actions.ts","../src/lib/clipboard.ts","../src/lib/sheet.ts","../src/lib/input.ts","../src/lib/palette.ts","../src/components/hooks.ts","../src/components/Fixed.tsx","../src/lib/paste.ts","../src/components/Editor.tsx","../src/components/PluginBase.tsx","../src/components/StoreObserver.tsx","../src/components/Resizer.tsx","../src/components/Emitter.tsx","../src/store/dispatchers.ts","../src/components/ContextMenu.tsx","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/utc.js","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/timezone.js","../src/parsers/core.ts","../src/formula/solver.ts","../src/renderers/core.ts","../src/formula/functions/__base.ts","../src/formula/functions/__utils.ts","../src/formula/functions/add.ts","../src/formula/functions/minus.ts","../src/formula/functions/multiply.ts","../src/formula/functions/divide.ts","../src/formula/functions/mod.ts","../src/formula/functions/sum.ts","../src/formula/functions/concat.ts","../src/formula/functions/concatenate.ts","../src/formula/functions/eq.ts","../src/formula/functions/ne.ts","../src/formula/functions/gt.ts","../src/formula/functions/gte.ts","../src/formula/functions/lt.ts","../src/formula/functions/lte.ts","../src/formula/functions/now.ts","../src/formula/functions/and.ts","../src/formula/functions/or.ts","../src/formula/functions/if.ts","../src/formula/functions/iferror.ts","../src/formula/functions/not.ts","../src/formula/functions/count.ts","../src/formula/functions/countif.ts","../src/formula/functions/sumif.ts","../src/formula/functions/vlookup.ts","../src/formula/functions/hlookup.ts","../src/formula/functions/index.ts","../src/formula/functions/match.ts","../src/formula/functions/log.ts","../src/formula/functions/log10.ts","../src/formula/functions/ln.ts","../src/formula/functions/abs.ts","../src/formula/functions/product.ts","../src/formula/functions/rand.ts","../src/formula/functions/pi.ts","../src/formula/functions/exp.ts","../src/formula/functions/radians.ts","../src/formula/functions/power.ts","../src/formula/functions/sqrt.ts","../src/formula/functions/round.ts","../src/formula/functions/roundup.ts","../src/formula/functions/rounddown.ts","../src/formula/functions/sin.ts","../src/formula/functions/cos.ts","../src/formula/functions/tan.ts","../src/formula/functions/asin.ts","../src/formula/functions/acos.ts","../src/formula/functions/atan.ts","../src/formula/functions/atan2.ts","../src/formula/functions/counta.ts","../src/formula/functions/average.ts","../src/formula/functions/max.ts","../src/formula/functions/min.ts","../src/formula/functions/len.ts","../src/formula/functions/lenb.ts","../src/formula/functions/uminus.ts","../src/formula/functions/row.ts","../src/formula/functions/col.ts","../src/formula/mapping.ts","../src/lib/hub.ts","../src/policy/core.ts","../src/lib/reference.ts","../src/lib/table.ts","../src/lib/events.ts","../src/components/Cell.tsx","../src/components/ScrollHandle.tsx","../src/components/HeaderCellTop.tsx","../src/components/HeaderCellLeft.tsx","../src/components/Tabular.tsx","../src/styles/minified.ts","../src/styles/embedder.ts","../src/components/FormulaBar.tsx","../src/components/svg/Base.tsx","../src/components/svg/SearchIcon.tsx","../src/components/svg/CloseIcon.tsx","../src/components/SearchBar.tsx","../src/components/GridSheet.tsx","../src/renderers/thousand_separator.ts","../src/renderers/checkbox.tsx","../src/styles/utils.ts"],"sourcesContent":["import type { ZoneType } from './types';\n\nexport const DEFAULT_HISTORY_LIMIT = 20;\n\nexport const DEFAULT_HEIGHT = 24;\nexport const DEFAULT_WIDTH = 90;\n\nexport const SHEET_HEIGHT = 500;\nexport const SHEET_WIDTH = 1000;\n\nexport const HEADER_HEIGHT = 24;\nexport const HEADER_WIDTH = 50;\n\nexport const MIN_WIDTH = 5;\nexport const MIN_HEIGHT = 5;\n\nexport const OVERSCAN_X = 5;\nexport const OVERSCAN_Y = 10;\n\nexport const DEFAULT_ALPHABET_CACHE_SIZE = 1000;\n\nexport class Special {\n public name: string;\n constructor(name: string) {\n this.name = name;\n }\n}\n\nexport const SECONDS_IN_DAY = 86400;\nexport const FULLDATE_FORMAT_UTC = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n\nexport const RESET_ZONE: ZoneType = {\n startY: -1,\n startX: -1,\n endY: -1,\n endX: -1,\n};\n","import { createContext } from 'react';\nimport { StoreType } from '../types';\n\nexport type Dispatcher = React.Dispatch<{\n type: number;\n value: any;\n}>;\n\nexport const Context = createContext(\n {} as {\n store: StoreType;\n dispatch: Dispatcher;\n },\n);\n","import type { Address, PointType, ExtraPointType } from '../types';\nimport { DEFAULT_ALPHABET_CACHE_SIZE } from '../constants';\n\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\nconst N2C_CACHE = new Map<number, string>();\nconst C2N_CACHE = new Map<string, number>();\n\nconst getColumnLetterFromNumber = (key: number, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE): string => {\n const cached = N2C_CACHE.get(--key);\n if (cached != null) {\n return cached;\n }\n if (key === 0) {\n return '';\n }\n let num = key;\n let result = '';\n do {\n result = ALPHABET[--num % 26] + result;\n num = Math.floor(num / 26);\n } while (num > 0);\n\n N2C_CACHE.set(key, result);\n const it = N2C_CACHE.keys();\n for (let st = it.next(); N2C_CACHE.size > cacheSize; st = it.next()) {\n // @ts-ignore\n N2C_CACHE.delete(st.value);\n }\n return result;\n};\n\nconst getNumberFromColumnLetter = (key: string, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE): number => {\n const cached = C2N_CACHE.get(key);\n if (cached != null) {\n return cached;\n }\n if (key === '') {\n return 0;\n }\n const alpha = key;\n let result = 0;\n for (let digit = 0; digit < alpha.length; digit++) {\n const a = alpha[alpha.length - digit - 1];\n const num = ALPHABET.indexOf(a) + 1;\n result += ALPHABET.length ** digit * num;\n }\n C2N_CACHE.set(key, result);\n const it = C2N_CACHE.keys();\n for (let st = it.next(); C2N_CACHE.size > cacheSize; st = it.next()) {\n // @ts-ignore\n C2N_CACHE.delete(st.value);\n }\n return result;\n};\n\nexport const x2c = (x: number): string => {\n if (x === 0) {\n return '';\n }\n const c = getColumnLetterFromNumber(x + 1);\n return x < 0 ? `$${c}` : c;\n};\n\nexport const c2x = (col: string, absolute = false): number => {\n const n = getNumberFromColumnLetter(col);\n return absolute ? -n : n;\n};\n\nexport const y2r = (y: number) => {\n if (y === 0) {\n return '';\n }\n return y < 0 ? `$${y}` : String(y);\n};\n\nexport const r2y = (row: number | string, absolute = false) => {\n if (typeof row === 'string') {\n row = parseInt(row, 10);\n }\n return absolute ? -row : row;\n};\n\nexport const p2a = ({ y, x, absX, absY }: ExtraPointType) => {\n if (x === 0 && y === 0) {\n return '0';\n }\n if (x === -1 && y === -1) {\n return '?';\n }\n return `${absX ? '$' : ''}${x2c(x)}${absY ? '$' : ''}${y2r(y)}`;\n};\n\nexport const a2p = (address: Address): ExtraPointType => {\n const m = address.match(/(\\$)?([A-Z]*)(\\$)?([0-9]*)/);\n if (m == null) {\n console.error('invalid address', address);\n return { y: -1, x: -1 };\n }\n const [, _absX, col, _absY, row] = m.slice();\n const [absX, absY] = [_absX != null, _absY != null];\n if (col === '' && row === '') {\n return { y: -1, x: -1, absX: false, absY: false };\n }\n return { y: r2y(row) || 0, x: c2x(col) || 0, absX, absY };\n};\n\nexport const grantAddressAbsolute = (address: Address, absCol: boolean, absRow: boolean) => {\n const m = address.match(/([A-Z]*)([0-9]*)/);\n if (m == null) {\n return;\n }\n const [, col, row] = m.slice();\n return `${absCol ? '$' : ''}${col}${absRow ? '$' : ''}${row}`;\n};\n\nexport const stripAddressAbsolute = (address: Address) => {\n return address.replace(/\\$/g, '');\n};\n","import type {\n MatrixType,\n AreaType,\n ZoneType,\n RangeType,\n PointType,\n Y,\n X,\n CellsByAddressType,\n ShapeType,\n MatricesByAddress,\n CellType,\n Address,\n} from '../types';\nimport { a2p, p2a, x2c, c2x } from './converters';\n\nexport const slideArea = (area: AreaType, y: Y, x: X): AreaType => {\n const { top, left, bottom, right } = area;\n return { top: top + y, left: left + x, bottom: bottom + y, right: right + x };\n};\n\nexport const superposeArea = (srcArea: AreaType, dstArea: AreaType): ShapeType => {\n const { height: srcHeight, width: srcWidth } = areaShape(srcArea);\n const { height: dstHeight, width: dstWidth } = areaShape(dstArea);\n\n // biggerHeight, biggerWidth\n return {\n height: srcHeight > dstHeight ? srcHeight : dstHeight,\n width: srcWidth > dstWidth ? srcWidth : dstWidth,\n };\n};\n\nexport const concatAreas = (area1: AreaType, area2: AreaType): AreaType => {\n const result: AreaType = { ...area1 };\n if (area2.left < area1.left) {\n result.left = area2.left;\n }\n if (area2.right > area1.right) {\n result.right = area2.right;\n }\n if (area2.top < area1.top) {\n result.top = area2.top;\n }\n if (area2.bottom > area1.bottom) {\n result.bottom = area2.bottom;\n }\n return result;\n};\n\nexport const zoneToArea = (zone: ZoneType): AreaType => {\n if (zone.endY === -1 || zone.endX === -1) {\n return { top: -1, left: -1, bottom: -1, right: -1 };\n }\n const [top, bottom] = zone.startY < zone.endY ? [zone.startY, zone.endY] : [zone.endY, zone.startY];\n const [left, right] = zone.startX < zone.endX ? [zone.startX, zone.endX] : [zone.endX, zone.startX];\n return { top, left, bottom, right };\n};\n\nexport const areaToZone = (area: AreaType): ZoneType => {\n return {\n startY: area.top,\n startX: area.left,\n endY: area.bottom,\n endX: area.right,\n };\n};\n\nexport const areaToRange = (area: AreaType): string => {\n const { top, left, bottom, right } = area;\n if (top === bottom && left === right) {\n return p2a({ y: top, x: left });\n }\n const leftTop = p2a({ y: top, x: left });\n const rightBottom = p2a({ y: bottom, x: right });\n return `${leftTop}:${rightBottom}`;\n};\n\nexport const between = (range: RangeType, index: number) => {\n if (range.start === -1 || range.end === -1) {\n return false;\n }\n return (range.start <= index && index <= range.end) || (range.end <= index && index <= range.start);\n};\n\nexport const among = (area: AreaType, point: PointType) => {\n if (area.top === -1 || area.left === -1 || area.bottom === -1 || area.right === -1) {\n return false;\n }\n const { y, x } = point;\n const { top, left, bottom, right } = area;\n return top <= y && y <= bottom && left <= x && x <= right;\n};\n\ntype ShapeExtension = { base?: number };\n\nexport const zoneShape = ({ base = 0, ...zone }: ZoneType & ShapeExtension): ShapeType => {\n if (zone.endY === -1 || zone.endX === -1) {\n return { height: 1, width: 1 };\n }\n return {\n height: base + Math.abs(zone.startY - zone.endY),\n width: base + Math.abs(zone.startX - zone.endX),\n };\n};\n\nexport const areaShape = ({ base = 0, ...area }: AreaType & ShapeExtension): ShapeType => {\n return {\n height: base + Math.abs(area.top - area.bottom),\n width: base + Math.abs(area.left - area.right),\n };\n};\n\nexport const matrixShape = ({ base = 0, matrix }: { matrix: MatrixType } & ShapeExtension): ShapeType => {\n const h = matrix.length;\n if (h === 0) {\n return { height: 0, width: 0 };\n }\n return { height: base + h, width: base + matrix[0].length };\n};\n\nexport const makeSequence = (start: number, stop: number, step: number = 1) => {\n return Array.from({ length: (stop - start - 1) / step + 1 }, (_, i) => start + i * step);\n};\n\nexport const oa2aa = (oa: { [s: string]: any }[], fields: string[]): MatrixType => {\n const aa: any[][] = [];\n oa.forEach((o) => {\n const a: any[] = [];\n fields.forEach((field) => {\n a.push(o[field]);\n });\n aa.push(a);\n });\n return aa;\n};\n\nexport const aa2oa = (aa: MatrixType, fields: string[]): { [s: string]: any }[] => {\n const oa: { [s: string]: any }[] = [];\n aa.forEach((a) => {\n const o: { [s: string]: any } = {};\n a.forEach((v, i) => {\n if (i >= fields.length) {\n return;\n }\n const field = fields[i];\n o[field] = v;\n });\n oa.push(o);\n });\n return oa;\n};\n\ntype PutMatrixFilterProps<T = any> = {\n srcValue: T;\n dstValue: T;\n srcPoint: PointType;\n dstPoint: PointType;\n};\n\nexport const putMatrix = <T = any>(\n dst: T[][],\n src: T[][],\n dstArea: AreaType,\n filter: (arg: PutMatrixFilterProps) => boolean = () => true,\n) => {\n const lostRows: MatricesByAddress<T> = {};\n const { top, left, bottom, right } = dstArea;\n const { height: dstNumRows, width: dstNumCols } = matrixShape({\n matrix: dst,\n base: 1,\n });\n for (let y = top; y <= bottom; y++) {\n const lostRow: T[] = [];\n for (let x = left; x <= right; x++) {\n const srcPoint = { y: y - top, x: x - left };\n const dstPoint = { y, x };\n const value = src[y - top][x - left];\n // -1 means excluding headers\n if (y < dstNumRows - 1 && x < dstNumCols - 1) {\n if (filter({ srcValue: value, dstValue: dst[y][x], srcPoint, dstPoint })) {\n dst[y][x] = value;\n }\n continue;\n }\n if (lostRow.length === 0) {\n lostRows[p2a(dstPoint)] = [lostRow];\n }\n lostRow.push(value);\n }\n }\n return lostRows;\n};\n\nexport const createMatrix = <T = any>(numRows: number, numCols: number, fill?: T): T[][] => {\n return [...Array(numRows)].map(() => Array(numCols).fill(fill));\n};\n\nexport const cropMatrix = <T = any>(matrix: T[][], area: AreaType): T[][] => {\n const { top, left, bottom, right } = area;\n return matrix.slice(top, bottom + 1).map((cols) => cols.slice(left, right + 1));\n};\n\nexport const buildInitialCellsFromOrigin = ({\n cells = {},\n ensured = {},\n matrix = [],\n flattenAs = 'value',\n origin = 'A1',\n}: {\n cells?: CellsByAddressType;\n ensured?: {\n numRows?: number;\n numCols?: number;\n };\n flattenAs?: keyof CellType;\n matrix?: MatrixType;\n origin?: Address;\n}) => {\n return buildInitialCells({\n cells,\n ensured,\n matrices: { [origin]: matrix },\n flattenAs,\n });\n};\n\nexport const buildInitialCells = ({\n cells = {},\n ensured = {},\n matrices = {},\n flattenAs = 'value',\n}: {\n cells?: CellsByAddressType;\n ensured?: {\n numRows?: number;\n numCols?: number;\n };\n flattenAs?: keyof CellType;\n matrices?: MatricesByAddress<any>;\n} = {}) => {\n buildCells({ cells, flattenAs, matrices });\n const { numRows, numCols } = Object.assign({ numRows: 1, numCols: 1 }, ensured);\n const rightBottom = p2a({ y: numRows, x: numCols });\n if (cells[rightBottom] == null) {\n cells[rightBottom] = {};\n }\n return cells;\n};\n\nexport const buildCells = <T>({\n cells = {},\n matrices = {},\n flattenAs,\n}: {\n cells?: CellsByAddressType;\n flattenAs?: keyof CellType;\n matrices?: MatricesByAddress<T>;\n}) => {\n Object.keys(matrices).forEach((baseAddress) => {\n const matrix = matrices[baseAddress];\n const { y: baseY, x: baseX } = a2p(baseAddress);\n matrix.forEach((row, y) => {\n row.forEach((e, x) => {\n const id = p2a({ y: baseY + y, x: baseX + x });\n if (flattenAs) {\n const cell = cells[id];\n cells[id] = { [flattenAs]: e, ...cell };\n } else {\n cells[id] = e as CellType;\n }\n });\n });\n });\n return cells;\n};\n\nexport const getMaxSizesFromCells = (cells: CellsByAddressType = {}) => {\n let [lastY, lastX] = [0, 0];\n Object.keys(cells).map((address) => {\n const { y, x } = a2p(address);\n if (lastY < y) {\n lastY = y;\n }\n if (lastX < x) {\n lastX = x;\n }\n });\n return { numRows: lastY, numCols: lastX };\n};\n\nexport const range = (start: number, end: number) => {\n const list: number[] = [];\n for (let i = start; i <= end; i++) {\n list.push(i);\n }\n return list;\n};\n\nexport const complementSelectingArea = (selectingArea: AreaType, choosing: PointType) => {\n if (selectingArea.left === -1) {\n selectingArea = {\n left: choosing.x,\n top: choosing.y,\n right: choosing.x,\n bottom: choosing.y,\n };\n }\n return selectingArea;\n};\n\nexport const isSameArea = (area1: AreaType, area2: AreaType) => {\n if (area1.top !== area2.top) {\n return false;\n }\n if (area1.left !== area2.left) {\n return false;\n }\n if (area1.bottom !== area2.bottom) {\n return false;\n }\n if (area1.right !== area2.right) {\n return false;\n }\n return true;\n};\n\nexport const expandRange = (range: string): Address[] => {\n if (range.indexOf(':') === -1) {\n return [range];\n }\n\n const result: Address[] = [];\n\n const isRowRange = /^\\d+\\:\\d+$/.test(range);\n\n if (isRowRange) {\n const [startRow, endRow] = range.split(':').map(Number);\n for (let row = startRow; row <= endRow; row++) {\n result.push(`${row}`);\n }\n return result;\n }\n\n const match = range.match(/^([A-Z]*)(\\d+)?\\:([A-Z]*)(\\d+)?$/);\n if (!match) {\n console.error('Invalid range format', range);\n return [range];\n }\n\n const [, startCol, startRow, endCol, endRow] = match;\n const startColIndex = startCol ? c2x(startCol) : 1;\n const endColIndex = endCol ? c2x(endCol) : 1;\n\n for (let col = startColIndex; col <= endColIndex; col++) {\n const currentColumn = startCol || endCol ? x2c(col) : '';\n if (startRow && endRow) {\n for (let row = Number(startRow); row <= Number(endRow); row++) {\n result.push(`${currentColumn}${row}`);\n }\n } else if (!startRow && !endRow) {\n result.push(currentColumn);\n }\n }\n return result;\n};\n\n// restrictZone resets a zone if the zone consists of a single cell.\nexport const restrictZone = (zone: ZoneType): ZoneType => {\n const s = zoneShape(zone);\n if (s.height + s.width === 0) {\n return { startY: -1, startX: -1, endY: -1, endX: -1 };\n }\n return { ...zone };\n};\n\nexport type BinarySearchPredicate = (mid: number) => boolean;\n\nexport const binarySearch = (\n low: number,\n high: number,\n predicate: BinarySearchPredicate,\n lessThan: boolean,\n): number => {\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n if (predicate(mid)) {\n if (lessThan) {\n high = mid - 1;\n } else {\n low = mid + 1;\n }\n } else {\n if (lessThan) {\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n }\n return lessThan ? low : high;\n};\n\nexport const moveKey = (obj: any, keyFrom: string, keyTo: string): void => {\n const v = obj[keyFrom];\n if (v == null) {\n return;\n }\n delete obj[keyFrom];\n obj[keyTo] = v;\n};\n\nexport const invertObject = (obj: { [key: string]: string }): { [value: string]: string } => {\n const inverted: { [value: string]: string } = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n inverted[obj[key]] = key;\n }\n }\n return inverted;\n};\n","import { a2p, x2c, y2r } from '../lib/converters';\nimport { Table } from '../lib/table';\nimport { Address, PointType, StoreType } from '../types';\n\nexport const restrictPoints = (store: StoreType, table: Table) => {\n const { choosing, selectingZone } = store;\n let { y, x } = choosing;\n let { startY: y1, startX: x1, endY: y2, endX: x2 } = selectingZone;\n let { startY: y3, startX: x3, endY: y4, endX: x4 } = table.wire.copyingZone;\n const [numRows, numCols] = [table.getNumRows(), table.getNumCols()];\n if (y > numRows) {\n y = numRows;\n }\n if (x > numCols) {\n x = numCols;\n }\n if (y1 > numRows) {\n y1 = numRows;\n }\n if (y2 > numRows) {\n y2 = numRows;\n }\n if (x1 > numCols) {\n x1 = numCols;\n }\n if (x2 > numCols) {\n x2 = numCols;\n }\n if (y3 > numRows) {\n y3 = numRows;\n }\n if (y4 > numRows) {\n y4 = numRows;\n }\n if (x3 > numCols) {\n x3 = numCols;\n }\n if (x4 > numCols) {\n x4 = numCols;\n }\n return {\n choosing: { y, x } as PointType,\n selectingZone: { startY: y1, startX: x1, endY: y2, endX: x2 },\n copyingZone: { startY: y3, startX: x3, endY: y4, endX: x4 },\n };\n};\n\nexport const shouldTracking = (operation: string) => {\n switch (operation) {\n case 'INSERT_ROWS':\n return true;\n case 'INSERT_COLS':\n return true;\n case 'REMOVE_ROWS':\n return true;\n case 'REMOVE_COLS':\n return true;\n case 'MOVE':\n return true;\n }\n return false;\n};\n\nexport const initSearchStatement = (table: Table, store: StoreType) => {\n const { searchQuery, searchCaseSensitive } = store;\n let { choosing } = store;\n if (!searchQuery) {\n return { matchingCells: [] };\n }\n const matchingCells: Address[] = [];\n for (let y = 1; y <= table.bottom; y++) {\n for (let x = 1; x <= table.right; x++) {\n const v = table.stringify({ point: { y, x } });\n const s = searchCaseSensitive ? v : v.toLowerCase();\n const q = searchCaseSensitive ? searchQuery : searchQuery.toLowerCase();\n if (s.indexOf(q) !== -1) {\n matchingCells.push(`${x2c(x)}${y2r(y)}`);\n }\n }\n }\n const matchingCellIndex = matchingCells.length === store.matchingCells.length ? store.matchingCellIndex : 0;\n if (matchingCells.length > 0) {\n const address = matchingCells[matchingCellIndex];\n choosing = a2p(address);\n }\n return { matchingCells, searchQuery, matchingCellIndex, choosing };\n};\n\nexport const isXSheetFocused = (store: StoreType) => {\n const { sheetId, tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return false;\n }\n if (sheetId === table.wire.editingSheetId) {\n return false;\n }\n return !!table.wire.editingAddress;\n};\n","import { DEFAULT_HEIGHT, DEFAULT_WIDTH, OVERSCAN_X, OVERSCAN_Y } from '../constants';\nimport { range, binarySearch, type BinarySearchPredicate } from './structs';\nimport { Table } from './table';\nimport type { AreaType, PointType, Virtualization } from '../types';\n\nexport const getCellRectPositions = (table: Table, { y, x }: PointType) => {\n let { width, height } = table.getRectSize({\n top: 1,\n left: 1,\n bottom: y,\n right: x,\n });\n width += table.headerWidth;\n height += table.headerHeight;\n const w = table.getCellByPoint({ y: 0, x }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n const h = table.getCellByPoint({ y, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n return {\n top: height,\n left: width,\n bottom: height + h,\n right: width + w,\n width: w,\n height: h,\n };\n};\n\nexport const getScreenRect = (e: HTMLDivElement) => {\n const top = e.scrollTop,\n left = e.scrollLeft;\n const height = e.offsetHeight,\n width = e.offsetWidth;\n const bottom = top + height,\n right = left + width;\n return { top, left, bottom, right, height, width };\n};\n\nexport const virtualize = (table: Table, e: HTMLDivElement | null): Virtualization | null => {\n if (e == null) {\n return null;\n }\n let boundaryTop = 0,\n boundaryLeft = 0,\n boundaryBottom = table.getNumRows(),\n boundaryRight = table.getNumCols();\n\n const { top, left, bottom, right } = getScreenRect(e);\n let width = 0,\n height = 0;\n for (let x = 1; x <= table.getNumCols(); x++) {\n const w = table.getCellByPoint({ y: 0, x }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n width += w;\n if (boundaryLeft === 0 && width > left) {\n boundaryLeft = Math.max(x - OVERSCAN_X, 1);\n }\n if (width > right) {\n boundaryRight = Math.min(x + OVERSCAN_X, table.getNumCols());\n break;\n }\n }\n for (let y = 1; y <= table.getNumRows(); y++) {\n const h = table.getCellByPoint({ y, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n height += h;\n if (boundaryTop === 0 && height > top) {\n boundaryTop = Math.max(y - OVERSCAN_Y, 1);\n }\n if (height > bottom) {\n boundaryBottom = Math.min(y + OVERSCAN_Y, table.getNumRows());\n break;\n }\n }\n const ys = range(boundaryTop, boundaryBottom);\n const xs = range(boundaryLeft, boundaryRight);\n const before = table.getRectSize({\n top: 1,\n left: 1,\n bottom: boundaryTop,\n right: boundaryLeft,\n });\n const after = table.getRectSize({\n top: boundaryBottom,\n left: boundaryRight,\n bottom: table.getNumRows(),\n right: table.getNumCols(),\n });\n return {\n ys,\n xs,\n adjuster: {\n top: before.height,\n left: before.width,\n bottom: after.height,\n right: after.width,\n },\n };\n};\n\nexport const smartScroll = (\n table: Table,\n e: HTMLDivElement | null,\n targetPoint: PointType,\n behavior: ScrollBehavior = 'auto',\n) => {\n if (e == null) {\n return;\n }\n const screen = getScreenRect(e);\n const target = getCellRectPositions(table, targetPoint);\n\n // when header is sticky\n const up = target.top - table.headerHeight;\n const left = target.left - table.headerWidth;\n const down = target.bottom - screen.height + 1;\n const right = target.right - screen.width + 1;\n\n const isTopOver = up < screen.top;\n const isLeftOver = left < screen.left;\n const isBottomOver = target.bottom > screen.bottom;\n const isRightOver = target.right > screen.right;\n\n if (isLeftOver) {\n if (isTopOver) {\n // go left up\n e.scrollTo({ left, top: up, behavior });\n } else if (isBottomOver) {\n // go left down\n e.scrollTo({ left, top: down, behavior });\n } else {\n // go left\n e.scrollTo({ left, top: screen.top, behavior });\n }\n } else if (isRightOver) {\n if (isTopOver) {\n // go right up\n e.scrollTo({ left: right, top: up, behavior });\n } else if (isBottomOver) {\n // go right down\n e.scrollTo({ left: right, top: down, behavior });\n } else {\n // go right\n e.scrollTo({ left: right, top: screen.top, behavior });\n }\n } else {\n if (isTopOver) {\n // go up\n e.scrollTo({ left: screen.left, top: up, behavior });\n } else if (isBottomOver) {\n // go down\n e.scrollTo({ left: screen.left, top: down, behavior });\n } else {\n // go nowhere\n }\n }\n};\n\ntype PositionGetter = (rect: DOMRect) => number;\n\nconst findVisibleElement = (\n elements: HTMLTableHeaderCellElement[],\n getPosition: PositionGetter,\n boundary: number,\n dataKey: string,\n): number => {\n const index = binarySearch(\n 0,\n elements.length - 1,\n (mid) => getPosition(elements[mid].getBoundingClientRect()) < boundary,\n false,\n );\n return parseInt(elements[index]?.dataset[dataKey] ?? '1');\n};\n\nexport const getAreaInTabular = (tabularElement: HTMLDivElement): AreaType => {\n const {\n top: topPosition,\n left: leftPosition,\n bottom: bottomPosition,\n right: rightPosition,\n } = tabularElement.getBoundingClientRect();\n\n const rows = Array.from(tabularElement.querySelectorAll('.gs-th-left')) as HTMLTableHeaderCellElement[];\n const cols = Array.from(tabularElement.querySelectorAll('.gs-th-top')) as HTMLTableHeaderCellElement[];\n\n const top = findVisibleElement(rows, (rect) => rect.top, topPosition, 'y');\n const bottom = findVisibleElement(rows, (rect) => rect.bottom, bottomPosition, 'y');\n const left = findVisibleElement(cols, (rect) => rect.left, leftPosition, 'x');\n const right = findVisibleElement(cols, (rect) => rect.right, rightPosition, 'x');\n\n return { top, left, bottom, right };\n};\n","import { OperationType as operations } from '../types';\n\nexport const RemoveRows: operations = 0b00000000000000000000000000000000000000000000000000001; // 1\nexport const RemoveCols: operations = 0b00000000000000000000000000000000000000000000000000010; // 2\nexport const InsertRowsAbove: operations = 0b00000000000000000000000000000000000000000000000000100; // 4\nexport const InsertRowsBelow: operations = 0b00000000000000000000000000000000000000000000000001000; // 8\nexport const InsertColsLeft: operations = 0b00000000000000000000000000000000000000000000000010000; // 16\nexport const InsertColsRight: operations = 0b00000000000000000000000000000000000000000000000100000; // 32\nexport const MoveFrom: operations = 0b00000000000000000000000000000000000000000000001000000; // 64\nexport const MoveTo: operations = 0b00000000000000000000000000000000000000000000010000000; // 128\nexport const Write: operations = 0b00000000000000000000000000000000000000000000100000000; // 256\nexport const Style: operations = 0b00000000000000000000000000000000000000000001000000000; // 512\nexport const Copy: operations = 0b00000000000000000000000000000000000000010000000000000; // 8192\nexport const Resize: operations = 0b00000000000000000000000000000000000000000010000000000; // 1024\nexport const SetRenderer: operations = 0b00000000000000000000000000000000000000000100000000000; // 2048\nexport const SetParser: operations = 0b00000000000000000000000000000000000000001000000000000; // 4096\nexport const SetPolicy: operations = 0b00000000000000000000000000000000000000100000000000000; // 16384\n\nexport const NoOperation: operations = 0;\n\nexport const Move: operations = MoveFrom | MoveTo; // 192\n\nexport const Update: operations = Write | Style | Copy | Resize | SetRenderer | SetParser | SetPolicy; // 7936\n\nexport const InsertRows: operations = InsertRowsAbove | InsertRowsBelow; // 12\n\nexport const InsertCols: operations = InsertColsLeft | InsertColsRight; // 48\n\nexport const Add: operations = InsertRows | InsertCols; // 60\n\nexport const Delete: operations = RemoveRows | RemoveCols; // 3\n\nexport const ReadOnly: operations = Update | Delete | Add | Move; //\n\nexport const hasOperation = (operation: operations | undefined, flag: operations) => {\n if (operation === undefined) {\n return false;\n }\n return (operation & flag) === flag;\n};\n\n// Don't use this function in production\nexport const debugOperations = (prevention: operations | undefined) => {\n const operations: string[] = [];\n if (hasOperation(prevention, RemoveRows)) {\n operations.push('RemoveRow');\n }\n if (hasOperation(prevention, RemoveCols)) {\n operations.push('RemoveCol');\n }\n if (hasOperation(prevention, InsertRowsAbove)) {\n operations.push('InsertRowAbove');\n }\n if (hasOperation(prevention, InsertRowsBelow)) {\n operations.push('InsertRowBelow');\n }\n if (hasOperation(prevention, InsertColsLeft)) {\n operations.push('InsertColLeft');\n }\n if (hasOperation(prevention, InsertColsRight)) {\n operations.push('InsertColRight');\n }\n if (hasOperation(prevention, MoveFrom)) {\n operations.push('MoveFrom');\n }\n if (hasOperation(prevention, MoveTo)) {\n operations.push('MoveTo');\n }\n if (hasOperation(prevention, Write)) {\n operations.push('Write');\n }\n if (hasOperation(prevention, Style)) {\n operations.push('Style');\n }\n if (hasOperation(prevention, Resize)) {\n operations.push('Resize');\n }\n if (hasOperation(prevention, SetRenderer)) {\n operations.push('SetRenderer');\n }\n if (hasOperation(prevention, SetParser)) {\n operations.push('SetParser');\n }\n return operations;\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import { a2p, grantAddressAbsolute, p2a } from '../lib/converters';\nimport { Table } from '../lib/table';\nimport { Id, PointType } from '../types';\n\ntype EvaluateProps = {\n table: Table;\n};\n\nexport type IdentifyProps = {\n table: Table;\n slideY?: number;\n slideX?: number;\n operation?: 'move' | 'removeRows' | 'removeCols';\n dependency: string;\n idMap?: { [id: string]: string };\n};\n\nexport type DisplayProps = {\n table: Table;\n slideY?: number;\n slideX?: number;\n};\n\n// strip sharp and dollars\nconst getId = (idString: string, stripAbsolute = true) => {\n let id = idString;\n if (stripAbsolute && id.startsWith('$')) {\n id = id.slice(1);\n }\n if (stripAbsolute && id.endsWith('$')) {\n id = id.slice(0, -1);\n }\n return id.replace('#', '');\n};\n\nexport class FormulaError {\n public code: string;\n public message: string;\n public error?: Error;\n constructor(code: string, message: string, error?: Error) {\n this.code = code;\n this.message = message;\n this.error = error;\n }\n}\n\nclass Entity<T = any> {\n public value: T;\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class ValueEntity extends Entity {\n public evaluate() {\n return this.value;\n }\n}\n\nexport class UnreferencedEntity extends Entity {\n public evaluate() {\n throw new FormulaError('#REF!', `Reference does not exist.`);\n }\n}\n\nexport class InvalidRefEntity extends Entity<string> {\n public evaluate() {\n throw new FormulaError('#NAME?', `Invalid ref: ${this.value}`);\n }\n}\n\nexport class RefEntity extends Entity<string> {\n constructor(value: string) {\n super(value);\n }\n public stringify() {\n return this.value.toUpperCase();\n }\n\n public evaluate({ table }: EvaluateProps): Table {\n const parsed = parseRef(this.value, { table, dependency: '' });\n if (parsed.table == null) {\n throw new FormulaError('#REF!', `Unknown sheet: ${parsed.sheetName}`);\n }\n if (parsed.addresses.length === 0) {\n throw new FormulaError('#REF!', `Invalid address: ${this.value}`);\n }\n const { y, x } = a2p(parsed.addresses[0]);\n return parsed.table.trim({ top: y, left: x, bottom: y, right: x });\n }\n\n public identify(props: IdentifyProps) {\n const { table, dependency, slideY = 0, slideX = 0 } = props;\n const parsed = parseRef(this.value, props);\n if (parsed.table == null) {\n return this.value;\n }\n const address = parsed.addresses[0];\n const { y, x, absX, absY } = a2p(address);\n const newPoint = {\n y: y + slideY,\n x: x + slideX,\n absX,\n absY,\n };\n const { id, formula } = parsed.table.getIdFormula(newPoint);\n if (id == null) {\n return this.value;\n }\n const system = table.wire.getSystem(id, table);\n table.wire.data[id]!.system = system;\n system.dependents.add(dependency);\n return `#${parsed.table.sheetId}!${formula}`;\n }\n}\n\nexport class RangeEntity extends Entity<string> {\n public stringify() {\n return this.value.toUpperCase();\n }\n\n public evaluate({ table }: EvaluateProps): Table {\n const parsed = parseRef(this.value, { table, dependency: '' });\n if (parsed.table == null) {\n throw new FormulaError('#REF!', `Unknown sheet: ${parsed.sheetName}`);\n }\n if (parsed.addresses.length === 0) {\n throw new FormulaError('#REF!', `Invalid address: ${this.value}`);\n }\n const area = parsed.table.rangeToArea(parsed.addresses.join(':'));\n return parsed.table.trim(area);\n }\n public identify(props: IdentifyProps) {\n const { table, dependency, slideY = 0, slideX = 0 } = props;\n const parsed = parseRef(this.value, props);\n if (parsed.table == null) {\n return this.value;\n }\n const formulas: string[] = [];\n for (let i = 0; i < parsed.addresses.length; i++) {\n const address = parsed.addresses[i];\n const { y, x, absX, absY } = a2p(address);\n const newPoint = {\n y: y + slideY,\n x: x + slideX,\n absX,\n absY,\n };\n const { id, formula } = parsed.table.getIdFormula(newPoint);\n if (id == null) {\n return this.value;\n }\n const system = table.wire.getSystem(id, table);\n table.wire.data[id]!.system = system;\n system.dependents.add(dependency);\n formulas.push(formula!);\n }\n return `#${parsed.table.sheetId}!${formulas.join(':')}`;\n }\n}\n\nexport class IdEntity extends Entity<string> {\n private parse(table: Table): { table: Table; id: string } {\n if (this.value.indexOf('!') !== -1) {\n const [tableId, id] = this.value.split('!'); // #id\n const sheetId = Number(tableId.slice(1));\n return { table: table.getTableBySheetId(sheetId)!, id: getId(id, false) };\n }\n return { table, id: getId(this.value, false) };\n }\n public evaluate({ table }: EvaluateProps) {\n const parsed = this.parse(table);\n if (parsed.id === '?') {\n throw new FormulaError('#REF!', `Reference does not exist`);\n }\n const { y, x } = parsed.table.getPointById(parsed.id);\n const [absY, absX] = [Math.abs(y), Math.abs(x)];\n return parsed.table.trim({\n top: absY,\n left: absX,\n bottom: absY,\n right: absX,\n });\n }\n public display({ table, slideY = 0, slideX = 0 }: DisplayProps) {\n const parsed = this.parse(table);\n const address = parsed.table.getAddressById(parsed.id, slideY, slideX);\n if (!address) {\n return '#REF!';\n }\n if (parsed.table.sheetId === table.sheetId) {\n return address;\n }\n return `${parsed.table.sheetPrefix()}${address}`;\n }\n public identify(props: IdentifyProps) {\n const { table, dependency, slideY = 0, slideX = 0 } = props;\n const address = this.display({ table, slideY, slideX });\n if (address == null || address.length < 2) {\n return '#?';\n }\n const { formula, ids } = parseRef(address, props);\n if (dependency) {\n ids.forEach((id) => {\n const system = table.wire.getSystem(id, table);\n table.wire.data[id]!.system = system;\n system.dependents.add(dependency);\n });\n }\n return formula || '#?';\n }\n}\n\nexport class IdRangeEntity extends Entity<string> {\n private parse(table: Table): { table: Table; ids: string[] } {\n const range = this.value;\n if (range.indexOf('!') !== -1) {\n const [tableId, idRange] = range.split('!'); // #id\n const sheetId = Number(tableId.slice(1));\n return { table: table.getTableBySheetId(sheetId)!, ids: idRange.split(':') };\n }\n return { table, ids: range.split(':') };\n }\n\n public evaluate({ table }: EvaluateProps): Table {\n const parsed = this.parse(table);\n const ids = parsed.ids.map((id) => getId(id));\n const ps: PointType[] = [];\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n if (id === '?') {\n throw new FormulaError('#REF!', `Reference does not exist`);\n }\n const p = parsed.table.getPointById(id);\n ps.push(p);\n }\n const [p1, p2] = ps;\n const [top, left, bottom, right] = [\n p1.y,\n p1.x,\n p2.y || parsed.table.getNumRows(),\n p2.x || parsed.table.getNumCols(),\n ];\n return parsed.table.trim({ top, left, bottom, right });\n }\n public display({ table, slideY = 0, slideX = 0 }: DisplayProps) {\n const parsed = this.parse(table);\n const range = parsed.ids\n .map((id) => getId(id, false))\n .map((id) => parsed.table.getAddressById(id, slideY, slideX) || '#REF!')\n .join(':');\n if (parsed.table.sheetId === table.sheetId) {\n return range;\n }\n return `${parsed.table.sheetPrefix()}${range}`;\n }\n public identify(props: IdentifyProps) {\n const { table, dependency, slideY = 0, slideX = 0 } = props;\n const range = this.display({ table, slideY, slideX });\n const { formula, ids } = parseRef(range, props);\n if (dependency) {\n ids.forEach((id) => {\n const system = table.wire.getSystem(id, table);\n table.wire.data[id]!.system = system;\n system.dependents.add(dependency);\n });\n }\n return formula;\n }\n}\n\nexport class FunctionEntity {\n public args: Expression[];\n public name: string;\n public precedence: number;\n private origin?: PointType;\n constructor(name: string, precedence = 0, args: Expression[] = [], origin?: PointType) {\n this.name = name;\n this.precedence = precedence;\n this.args = args;\n this.origin = origin;\n }\n\n public evaluate({ table }: EvaluateProps): any {\n const name = this.name.toLowerCase();\n const Func = table.getFunction(name);\n if (Func == null) {\n throw new FormulaError('#NAME?', `Unknown function: ${name}`);\n }\n const func = new Func({ args: this.args, table, origin: this.origin });\n return func.call();\n }\n}\n\nexport type Expression =\n | ValueEntity\n | RefEntity\n | RangeEntity\n | IdEntity\n | IdRangeEntity\n | FunctionEntity\n | UnreferencedEntity\n | InvalidRefEntity;\n\nconst ZERO = new ValueEntity(0);\n\nexport type TokenType =\n | 'VALUE'\n | 'REF'\n | 'RANGE'\n | 'ID'\n | 'ID_RANGE'\n | 'FUNCTION'\n | 'PREFIX_OPERATOR'\n | 'INFIX_OPERATOR'\n | 'POSTFIX_OPERATOR'\n | 'OPEN'\n | 'CLOSE'\n | 'COMMA'\n | 'SPACE'\n | 'UNREFERENCED'\n | 'INVALID_REF';\n\nconst INFIX_FUNCTION_NAME_MAP = {\n '+': 'add',\n '-': 'minus',\n '/': 'divide',\n '*': 'multiply',\n '^': 'power',\n '&': 'concat',\n '=': 'eq',\n '<>': 'ne',\n '>': 'gt',\n '>=': 'gte',\n '<': 'lt',\n '<=': 'lte',\n};\n\nconst PREFIX_FUNCTION_NAME_MAP = {\n '-': 'uminus',\n};\n\nconst WHITESPACE_CHARS = new Set([' ', '\\n', '\\r', '\\t', '\\f']);\nconst SPECIAL_CHARS = new Set([...WHITESPACE_CHARS, '+', '-', '/', '*', '^', '&', '=', '<', '>', ')', ',', '%']);\n\nexport class Token {\n type: TokenType;\n entity: any;\n precedence: number;\n private origin?: PointType;\n\n constructor(type: TokenType, entity: any, precedence = 0, origin?: PointType) {\n this.type = type;\n this.entity = entity;\n this.precedence = precedence;\n this.origin = origin;\n }\n\n public length() {\n if (this.type === 'VALUE' && typeof this.entity === 'string') {\n return this.entity.length + 2;\n }\n return new String(this.entity).length;\n }\n\n public stringify() {\n if (this.type === 'VALUE') {\n if (typeof this.entity === 'string') {\n return `\"${this.entity}\"`;\n }\n if (typeof this.entity === 'boolean') {\n return this.entity ? 'TRUE' : 'FALSE';\n }\n }\n return this.entity as string;\n }\n\n public convert() {\n switch (this.type) {\n case 'VALUE':\n return new ValueEntity(this.entity);\n\n case 'ID':\n return new IdEntity(this.entity as string);\n\n case 'ID_RANGE':\n return new IdRangeEntity(this.entity as string);\n\n case 'REF':\n return new RefEntity(this.entity as string);\n\n case 'RANGE':\n return new RangeEntity(this.entity as string);\n\n case 'INFIX_OPERATOR': {\n const name = INFIX_FUNCTION_NAME_MAP[this.entity as keyof typeof INFIX_FUNCTION_NAME_MAP];\n return new FunctionEntity(name, this.precedence);\n }\n case 'PREFIX_OPERATOR': {\n const name = PREFIX_FUNCTION_NAME_MAP[this.entity as keyof typeof PREFIX_FUNCTION_NAME_MAP];\n return new FunctionEntity(name, this.precedence);\n }\n case 'FUNCTION':\n return new FunctionEntity(this.entity as string, 0, [], this.origin);\n\n case 'UNREFERENCED':\n return new UnreferencedEntity(this.entity);\n\n case 'INVALID_REF':\n return new InvalidRefEntity(this.entity as string);\n }\n }\n}\n\nconst isWhiteSpace = (char: string) => {\n return WHITESPACE_CHARS.has(char);\n};\n\nconst TOKEN_OPEN = new Token('OPEN', '('),\n TOKEN_CLOSE = new Token('CLOSE', ')'),\n TOKEN_COMMA = new Token('COMMA', ','),\n TOKEN_ADD = new Token('INFIX_OPERATOR', '+', 3),\n TOKEN_MINUS = new Token('INFIX_OPERATOR', '-', 3),\n TOKEN_UMINUS = new Token('PREFIX_OPERATOR', '-', 6),\n TOKEN_DIVIDE = new Token('INFIX_OPERATOR', '/', 4),\n TOKEN_MULTIPLY = new Token('INFIX_OPERATOR', '*', 4),\n TOKEN_POWER = new Token('INFIX_OPERATOR', '^', 5),\n TOKEN_CONCAT = new Token('INFIX_OPERATOR', '&', 4),\n TOKEN_GTE = new Token('INFIX_OPERATOR', '>=', 2),\n TOKEN_GT = new Token('INFIX_OPERATOR', '>', 2),\n TOKEN_LTE = new Token('INFIX_OPERATOR', '<=', 2),\n TOKEN_LT = new Token('INFIX_OPERATOR', '<', 2),\n TOKEN_NE = new Token('INFIX_OPERATOR', '<>', 1),\n TOKEN_EQ = new Token('INFIX_OPERATOR', '=', 1);\n\nconst BOOLS: { [s: string]: boolean } = { ['true']: true, ['false']: false };\n\ntype LexerOption = {\n origin?: PointType;\n idMap?: { [id: Id]: Id };\n};\n\nexport class Lexer {\n private index: number;\n private formula: string;\n public tokens: Token[] = [];\n public foreign: boolean = false;\n private origin?: PointType;\n private idMap: { [id: Id]: Id };\n\n constructor(formula: string, options?: LexerOption) {\n this.formula = formula;\n this.index = 0;\n this.tokens = [];\n if (options?.origin) {\n this.origin = options.origin;\n }\n\n this.idMap = options?.idMap ?? {};\n }\n\n private isWhiteSpace() {\n return isWhiteSpace(this.formula[this.index]);\n }\n\n private next(base = 1) {\n this.index += base;\n }\n\n private get(base = 0) {\n const c = this.formula[this.index + base];\n return c;\n }\n\n private getToken(base = 0) {\n return this.tokens[this.tokens.length + base];\n }\n\n public getTokenIndexByCharPosition(pos: number): [number, boolean] {\n // return [index, edge]\n let start = 0,\n end = 0;\n\n for (let i = 0; i < this.tokens.length; i++) {\n const token = this.tokens[i];\n end = start + token.length();\n if (start <= pos && pos <= end) {\n return [i, pos === start || pos === end];\n }\n start = end;\n }\n return [-1, false];\n }\n\n public getTokenPositionRange(index: number, slide = 1): [number, number] {\n let start = 0,\n end = 0;\n for (let i = 0; i < index; i++) {\n start = end;\n end += this.tokens[i].length();\n }\n return [start + slide, end + slide];\n }\n\n public stringify() {\n return this.tokens.map((t) => t.stringify()).join('');\n }\n\n public identify(props: IdentifyProps): string {\n const converted = this.tokens.map((t) => {\n switch (t.type) {\n case 'VALUE':\n if (typeof t.entity === 'number' || typeof t.entity === 'boolean') {\n return t.entity;\n }\n return `\"${t.entity}\"`;\n\n case 'ID':\n return new IdEntity(t.entity as string).identify(props);\n\n case 'ID_RANGE':\n return new IdRangeEntity(t.entity as string).identify(props);\n\n case 'REF':\n return new RefEntity(t.entity as string).identify(props);\n\n case 'RANGE':\n return new RangeEntity(t.entity as string).identify(props);\n }\n return t.entity;\n });\n return converted.join('');\n }\n\n public display({ table }: DisplayProps) {\n return this.tokens\n .map((t) => {\n switch (t.type) {\n case 'VALUE':\n if (typeof t.entity === 'number' || typeof t.entity === 'boolean') {\n return t.entity;\n }\n return `\"${t.entity}\"`;\n case 'ID':\n return new IdEntity(t.entity as string).display({ table });\n case 'ID_RANGE':\n return new IdRangeEntity(t.entity as string).display({ table });\n }\n return t.entity;\n })\n .join('');\n }\n\n public tokenize() {\n while (this.index <= this.formula.length) {\n this.skipSpaces();\n let char = this.get();\n this.next();\n switch (char) {\n case undefined:\n return;\n case '(':\n this.tokens.push(TOKEN_OPEN);\n continue;\n case ')':\n this.tokens.push(TOKEN_CLOSE);\n continue;\n case ',':\n this.tokens.push(TOKEN_COMMA);\n continue;\n case '+':\n this.tokens.push(TOKEN_ADD);\n continue;\n case '-': {\n const prev1 = this.getToken(-1)?.type;\n const prev2 = this.getToken(-2)?.type;\n if (prev1 === 'INFIX_OPERATOR' || (prev1 === 'SPACE' && prev2 === 'INFIX_OPERATOR')) {\n this.tokens.push(TOKEN_UMINUS);\n } else {\n this.tokens.push(TOKEN_MINUS);\n }\n continue;\n }\n case '/':\n this.tokens.push(TOKEN_DIVIDE);\n continue;\n case '*':\n this.tokens.push(TOKEN_MULTIPLY);\n continue;\n case '^':\n this.tokens.push(TOKEN_POWER);\n continue;\n case '&':\n this.tokens.push(TOKEN_CONCAT);\n continue;\n case '=':\n this.tokens.push(TOKEN_EQ);\n continue;\n case '>':\n if (this.get() === '=') {\n this.next();\n this.tokens.push(TOKEN_GTE);\n continue;\n }\n this.tokens.push(TOKEN_GT);\n continue;\n case '<':\n if (this.get() === '=') {\n this.next();\n this.tokens.push(TOKEN_LTE);\n continue;\n }\n if (this.get() === '>') {\n this.next();\n this.tokens.push(TOKEN_NE);\n continue;\n }\n this.tokens.push(TOKEN_LT);\n continue;\n case '\"': {\n const buf = this.getString('\"');\n this.tokens.push(new Token('VALUE', buf));\n continue;\n }\n case \"'\": {\n const buf = this.getString(\"'\");\n char = `'${buf}'`;\n break;\n }\n case '!': {\n this.foreign = true;\n break;\n // not continue\n }\n case '%': {\n this.tokens.push(new Token('POSTFIX_OPERATOR', '%', 4));\n continue;\n }\n } // switch end\n let buf = char;\n\n while (true) {\n const c = this.get();\n if (c === '(') {\n this.tokens.push(new Token('FUNCTION', buf, 0, this.origin), TOKEN_OPEN);\n this.next();\n break;\n }\n if (c == null || SPECIAL_CHARS.has(c)) {\n if (buf.length === 0) {\n break;\n }\n if (buf.match(/^[+-]?(\\d*[.])?\\d+$/)) {\n this.tokens.push(new Token('VALUE', parseFloat(buf)));\n } else {\n const bool = BOOLS[buf.toLowerCase()];\n if (bool != null) {\n this.tokens.push(new Token('VALUE', bool));\n } else if (buf.startsWith('#')) {\n if (buf.indexOf('#REF!') !== -1) {\n this.tokens.push(new Token('UNREFERENCED', buf));\n } else if (buf.indexOf(':') !== -1) {\n this.tokens.push(new Token('ID_RANGE', this.resolveIdRange(buf)));\n } else {\n this.tokens.push(new Token('ID', buf));\n }\n } else if (buf.indexOf(':') !== -1) {\n this.tokens.push(new Token('RANGE', buf));\n } else {\n if (isNaN(buf[buf.length - 1] as unknown as number)) {\n this.tokens.push(new Token('INVALID_REF', buf));\n } else {\n this.tokens.push(new Token('REF', buf));\n }\n }\n }\n break;\n }\n buf += c;\n this.next();\n }\n }\n }\n private skipSpaces() {\n let space: string = '';\n while (this.isWhiteSpace()) {\n space += this.formula[this.index++];\n }\n if (space !== '') {\n this.tokens.push(new Token('SPACE', space));\n }\n }\n\n private getString(quote = '\"') {\n let buf = '';\n\n while (true) {\n const c = this.get();\n this.next();\n if (c == null) {\n break;\n }\n if (c === quote) {\n if (quote === '\"' && this.get() === quote) {\n // escape for double quotes\n buf += quote;\n this.next();\n continue;\n } else if (quote === \"'\" && this.get() === quote) {\n // keep consecutive single quotes as is\n buf += c;\n continue;\n } else {\n break;\n }\n } else {\n buf += c;\n }\n }\n return buf;\n }\n\n private resolveIdRange(range: string) {\n const [sheetId, refString] = range.split('!');\n const refs = refString.split(':');\n const done = new Set<number>();\n\n Object.keys(this.idMap).forEach((before) => {\n const after = this.idMap[before];\n\n // #x -> #y, #$x -> #$y, #x$ -> #y$, #$x$ -> #$y$\n const regex = new RegExp(`(\\\\$)?#${before}(\\\\$)?`);\n\n for (let i = 0; i < refs.length; i++) {\n if (done.has(i)) {\n continue;\n }\n\n const ref = refs[i];\n const replaced = ref.replace(regex, (_, prefix, suffix) => {\n return `${prefix || ''}#${after}${suffix || ''}`;\n });\n if (replaced === ref) {\n continue;\n }\n\n refs[i] = replaced;\n done.add(i);\n }\n });\n return `${sheetId}!${refs.join(':')}`;\n }\n}\n\nexport class Parser {\n public index = 0;\n public depth = 0;\n public tokens: Token[];\n constructor(tokens: Token[]) {\n this.tokens = tokens;\n }\n public build() {\n const { expr } = this.parse(false);\n return expr;\n }\n\n private parse(underFunction: boolean) {\n const stack: Expression[] = [];\n let lastOperator: undefined | FunctionEntity;\n\n const complement = (hasNext = false) => {\n if (lastOperator) {\n const outer = stack.pop();\n lastOperator.args.push(outer!);\n }\n return { hasNext, expr: stack.shift() };\n };\n\n while (this.tokens.length > this.index) {\n const token = this.tokens[this.index++];\n if (token.type === 'SPACE') {\n continue;\n }\n if (token.type === 'COMMA') {\n if (!underFunction) {\n throw new FormulaError('#ERROR!', 'Invalid comma');\n }\n return complement(true);\n } else if (\n token.type === 'VALUE' ||\n token.type === 'ID' ||\n token.type === 'ID_RANGE' ||\n token.type === 'REF' ||\n token.type === 'RANGE' ||\n token.type === 'UNREFERENCED' ||\n token.type === 'INVALID_REF'\n ) {\n const expr = token.convert();\n stack.push(expr!);\n } else if (token.type === 'POSTFIX_OPERATOR' && token.entity === '%') {\n const expr = stack.pop();\n if (!expr) {\n throw new FormulaError('#ERROR!', 'Missing expression before %');\n }\n const divideBy100 = new FunctionEntity('divide', 4, [expr, new ValueEntity(100)]);\n stack.push(divideBy100);\n } else if (token.type === 'FUNCTION') {\n this.index++;\n this.depth++;\n const func = token.convert() as FunctionEntity;\n stack.push(func);\n\n while (true) {\n const { expr, hasNext } = this.parse(true);\n if (expr) {\n func.args.push(expr);\n }\n if (!hasNext) {\n break;\n }\n }\n } else if (token.type === 'OPEN') {\n this.depth++;\n const { expr } = this.parse(false);\n stack.push(expr!);\n } else if (token.type === 'CLOSE') {\n if (this.depth-- === 0) {\n throw new FormulaError('#ERROR!', 'Unexpected end paren');\n }\n return complement();\n } else if (token.type === 'INFIX_OPERATOR') {\n const operator = token.convert() as FunctionEntity;\n let left = stack.pop();\n if (left == null) {\n if (operator.name === 'minus' || operator.name === 'add') {\n left = ZERO;\n } else {\n throw new FormulaError('#ERROR!', 'Missing left expression');\n }\n }\n\n if (lastOperator == null) {\n operator.args.push(left);\n stack.unshift(operator);\n } else if (operator.precedence > lastOperator.precedence) {\n operator.args.push(left);\n lastOperator.args.push(operator);\n stack.unshift(lastOperator);\n } else {\n const outer = stack.shift();\n operator.args.push(outer!);\n lastOperator.args.push(left);\n stack.unshift(operator);\n }\n lastOperator = operator;\n } else if (token.type === 'PREFIX_OPERATOR') {\n const operator = token.convert() as FunctionEntity;\n if (lastOperator) {\n lastOperator.args.push(operator);\n } else {\n stack.unshift(operator);\n }\n lastOperator = operator;\n }\n }\n return complement();\n }\n}\n\nexport const identifyFormula = (value: any, { idMap, ...props }: IdentifyProps) => {\n if (typeof value === 'string' || value instanceof String) {\n if (value.charAt(0) === '=') {\n const lexer = new Lexer(value.substring(1), { idMap });\n lexer.tokenize();\n const identified = lexer.identify(props);\n return '=' + identified;\n }\n }\n return value;\n};\n\nexport const stripSheetName = (sheetName: string) => {\n if (sheetName.charAt(0) === \"'\") {\n sheetName = sheetName.slice(1);\n }\n if (sheetName.charAt(sheetName.length - 1) === \"'\") {\n sheetName = sheetName.slice(0, -1);\n }\n return sheetName;\n};\n\nexport function splitRef(ref: string): { sheetName: string | undefined; addresses: string[] } {\n let sheetName: string | undefined = undefined;\n let addresses: string[] = [];\n\n if (ref.startsWith(\"'\")) {\n let i = 1;\n let name = '';\n\n while (i < ref.length) {\n const char = ref[i];\n const nextChar = ref[i + 1];\n\n if (char === \"'\") {\n if (nextChar === \"'\") {\n name += \"'\";\n i += 2;\n } else if (nextChar === '!') {\n i += 2;\n break;\n } else {\n return { sheetName: undefined, addresses: [] };\n }\n } else {\n name += char;\n i++;\n }\n }\n\n sheetName = name;\n const addressPart = ref.slice(i).trim();\n addresses = addressPart.split(':');\n } else {\n const excl = ref.indexOf('!');\n if (excl !== -1) {\n sheetName = ref.slice(0, excl);\n const addressPart = ref.slice(excl + 1).trim();\n addresses = addressPart.split(':');\n } else {\n addresses = ref.trim().split(':');\n }\n }\n return { sheetName, addresses };\n}\n\nexport const parseRef = (\n ref: string,\n { table, operation, dependency }: IdentifyProps,\n): {\n table: Table;\n sheetId?: number;\n formula?: string;\n sheetName?: string;\n addresses: string[];\n ids: string[];\n} => {\n const { sheetName, addresses } = splitRef(ref);\n const ids: string[] = [];\n if (sheetName) {\n table = table.getTableBySheetName(sheetName)!;\n if (table == null) {\n return { table, sheetName, addresses, ids };\n }\n }\n if (addresses.length === 0) {\n return { table, sheetName, addresses, ids };\n }\n const refs: string[] = [];\n for (let i = 0; i < addresses.length; i++) {\n const address = addresses[i];\n const { y, x, absX, absY } = a2p(address);\n let id = table.getId({ y, x });\n\n // if the id is the same as the dependency by the operation,\n // we need to adjust the id based on the operation\n if (id === dependency) {\n if (operation === 'removeRows') {\n id = table.getId({ y: y - 1, x });\n } else if (operation === 'removeCols') {\n id = table.getId({ y, x: x - 1 });\n }\n }\n if (id == null) {\n refs.push(grantAddressAbsolute(address, !!absX, !!absY) || '?');\n continue;\n }\n ids.push(id);\n refs.push(`${absX ? '$' : ''}#${id}${absY ? '$' : ''}`);\n }\n let formula = `#${table.sheetId}!${refs.join(':')}`;\n return {\n table,\n sheetName,\n addresses,\n ids,\n formula,\n };\n};\n","import dayjs from 'dayjs';\n\nexport const defaultTimeDeltaFormat = 'HH:mm:ss';\n\nexport const BASE_DATE = new Date('2345-01-02T03:04:05Z');\ntype DiffFunction = (date: Date | number, amount: number) => Date;\nconst UNITS = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'] as const;\nconst ADD_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).add(amount, unit).toDate(),\n) as DiffFunction[];\nconst SUB_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).subtract(amount, unit).toDate(),\n) as DiffFunction[];\n\ntype Diff = [number, number, number, number, number, number, number];\n\nexport class TimeDelta {\n public gsType = 'TimeDelta';\n protected diff: Diff = [0, 0, 0, 0, 0, 0, 0];\n private date1: Date;\n private date2: Date;\n public format: string;\n\n constructor(date1: Date, date2: Date, format = defaultTimeDeltaFormat) {\n this.diff = [\n date1.getFullYear() - date2.getFullYear(),\n date1.getMonth() - date2.getMonth(),\n date1.getDate() - date2.getDate(),\n date1.getHours() - date2.getHours(),\n date1.getMinutes() - date2.getMinutes(),\n date1.getSeconds() - date2.getSeconds(),\n date1.getMilliseconds() - date2.getMilliseconds(),\n ];\n this.date1 = date1;\n this.date2 = date2;\n this.format = format;\n }\n public add(date: Date) {\n this.diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return date;\n }\n public sub(date: Date) {\n this.diff.forEach((n, i) => {\n date = SUB_FNS[i](date, n);\n });\n return date;\n }\n\n public stringify(format?: string) {\n if (format == null) {\n format = this.format;\n }\n const tokens = [];\n const msecs = this.date1.getMilliseconds() - this.date2.getMilliseconds();\n let secs = (this.date1.getTime() - this.date2.getTime()) / 1000;\n for (const divider of [3600, 60]) {\n tokens.push(Math.floor(secs / divider));\n secs %= divider;\n }\n tokens.push(secs, msecs);\n let result = format;\n result = result.replace('HH', String(tokens[0]).padStart(2, '0'));\n result = result.replace('H', String(tokens[0]));\n result = result.replace('mm', String(tokens[1]).padStart(2, '0'));\n result = result.replace('ss', String(tokens[2]).padStart(2, '0'));\n result = result.replace('SSS', String(tokens[3]).padStart(3, '0'));\n result = result.replace('SS', String(tokens[3]).padStart(2, '0').substring(0, 2));\n result = result.replace('S', String(tokens[3]).padStart(1, '0').substring(0, 1));\n return result;\n }\n\n public toJSON() {\n return this.stringify();\n }\n\n public toString() {\n return this.stringify();\n }\n\n static create(hours = 0, minutes = 0, seconds = 0, milliseconds = 0) {\n const diff: Diff = [0, 0, 0, hours, minutes, seconds, milliseconds];\n let date = BASE_DATE;\n diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return new TimeDelta(date, BASE_DATE);\n }\n\n static is(obj: any): boolean {\n if (obj instanceof TimeDelta) {\n return true;\n }\n if (obj?.gsType === 'TimeDelta') {\n return true;\n }\n return false;\n }\n\n static ensure(obj: any) {\n if (obj instanceof TimeDelta) {\n return obj;\n }\n if (obj?.gsType === 'TimeDelta') {\n return TimeDelta.fromObject(obj);\n }\n return TimeDelta.create();\n }\n static fromObject(obj: any) {\n return new TimeDelta(new Date(obj.date1), new Date(obj.date2));\n }\n static parse(value: string, format = defaultTimeDeltaFormat, strict = false): TimeDelta | undefined {\n {\n const formattedMatcher = dayjsFormatToNamedRegex(format);\n const match = value.match(formattedMatcher);\n if (match?.groups) {\n return TimeDelta.create(\n Number(match.groups.HH || match.groups.H || 0),\n Number(match.groups.mm || match.groups.m || 0),\n Number(match.groups.ss || match.groups.s || 0),\n Number(match.groups.SSS || match.groups.SS || match.groups.S || 0),\n );\n }\n }\n if (strict) {\n return;\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes, seconds] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})\\.(\\d+)$/);\n if (match) {\n const [, _sign, hours, minutes, seconds, msecs] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(\n sign * Number(hours),\n sign * Number(minutes),\n sign * Number(seconds),\n sign * Number(msecs),\n );\n }\n }\n }\n}\n\nconst tokenRegexMap: Record<string, { group: string; pattern: string }> = {\n HH: { group: 'HH', pattern: '(?<HH>\\\\d+)' },\n H: { group: 'H', pattern: '(?<HH>\\\\d+)' },\n mm: { group: 'mm', pattern: '(?<mm>[0-5]\\\\d)' },\n m: { group: 'm', pattern: '(?<m>\\\\d|[1-5]\\\\d)' },\n ss: { group: 'ss', pattern: '(?<ss>[0-5]\\\\d)' },\n s: { group: 's', pattern: '(?<s>\\\\d|[1-5]\\\\d)' },\n SSS: { group: 'SSS', pattern: '(?<SSS>\\\\d{3})' },\n SS: { group: 'SS', pattern: '(?<SS>\\\\d{2})' },\n S: { group: 'S', pattern: '(?<S>\\\\d)' },\n};\n\nfunction dayjsFormatToNamedRegex(format: string): RegExp {\n const sortedTokens = Object.keys(tokenRegexMap).sort((a, b) => b.length - a.length);\n const tokenPattern = new RegExp(sortedTokens.join('|'), 'g');\n\n const escapedFormat = format.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n const regexSource = escapedFormat.replace(tokenPattern, (match) => {\n return tokenRegexMap[match]?.pattern ?? match;\n });\n\n return new RegExp(`^${regexSource}$`);\n}\n\nexport const safeQueueMicrotask =\n typeof queueMicrotask === 'function' ? queueMicrotask : (cb: () => void) => Promise.resolve().then(cb);\n","import dayjs from 'dayjs';\nimport type { AreaType, CellsByAddressType, CellType, PointType, StoreType } from '../types';\nimport { Table } from './table';\nimport { areaShape, areaToZone, complementSelectingArea, concatAreas, zoneToArea } from './structs';\nimport { p2a } from './converters';\nimport { identifyFormula } from '../formula/evaluator';\nimport { TimeDelta } from './time';\nimport { CSSProperties } from 'react';\n\nconst BORDER_AUTOFILL_DRAGGING = 'dashed 1px #888888';\n\ntype Direction = 'left' | 'right' | 'up' | 'down' | 'none';\ntype Orientation = 'horizontal' | 'vertical' | 'none';\nconst DirectionMapping: {\n [key: string]: [Orientation, number];\n} = {\n left: ['horizontal', -1],\n right: ['horizontal', 1],\n up: ['vertical', -1],\n down: ['vertical', 1],\n none: ['none', 0],\n};\n\nexport class Autofill {\n private readonly src: AreaType;\n private readonly dst: AreaType;\n private readonly direction: Direction;\n private readonly table: Table;\n constructor(store: StoreType, draggingTo: PointType) {\n const { tableReactive: tableRef, choosing, selectingZone } = store;\n const table = tableRef.current;\n if (!table) {\n throw new Error('Table is not available');\n }\n this.src = complementSelectingArea(zoneToArea(selectingZone), choosing);\n this.direction = this.suggestDirection(draggingTo);\n this.dst = this.getDestinationArea(draggingTo);\n this.table = table;\n }\n\n public get applied(): Table {\n const [orientation, sign] = DirectionMapping[this.direction];\n const matrix = this.table.getMatrix({ area: this.src, refEvaluation: 'SYSTEM' });\n const srcShape = areaShape({ ...this.src, base: 1 });\n const dstShape = areaShape({ ...this.dst, base: 1 });\n\n const diff: CellsByAddressType = {};\n if (orientation === 'horizontal') {\n for (let i = 0; i < dstShape.height; i++) {\n // TODO: pass the originPath\n const patterns = this.getChangePatterns(matrix[i], '');\n for (let j = 0; j < dstShape.width; j++) {\n const baseCell = matrix[i % srcShape.height]?.[j % srcShape.width];\n const x = sign > 0 ? this.dst.left + j : this.dst.right - j;\n const px = sign > 0 ? j % srcShape.width : (srcShape.width - 1 - (j % srcShape.width)) % srcShape.width;\n const point = { y: this.dst.top + i, x };\n const id = this.table.getId(point);\n const value = patterns[px].next().value;\n const nextValue = identifyFormula(value, {\n dependency: id,\n table: this.table,\n });\n diff[p2a(point)] = {\n ...baseCell,\n value: nextValue,\n };\n }\n }\n } else if (orientation === 'vertical') {\n for (let i = 0; i < dstShape.width; i++) {\n // TODO: pass the originPath\n const patterns = this.getChangePatterns(\n matrix.map((row) => row[i]),\n '',\n );\n for (let j = 0; j < dstShape.height; j++) {\n const baseCell = matrix[j % srcShape.height]?.[i % srcShape.width];\n const y = sign > 0 ? this.dst.top + j : this.dst.bottom - j;\n const py = sign > 0 ? j % srcShape.height : (srcShape.height - 1 - (j % srcShape.height)) % srcShape.height;\n const value = patterns[py].next().value;\n diff[p2a({ y, x: this.dst.left + i })] = { ...baseCell, value };\n }\n }\n }\n const table = this.table.update({\n diff,\n operator: 'USER',\n undoReflection: {\n sheetId: this.table.sheetId,\n selectingZone: areaToZone(this.src),\n },\n redoReflection: {\n sheetId: this.table.sheetId,\n selectingZone: areaToZone(this.dst),\n },\n });\n return table;\n }\n\n public get wholeArea() {\n return concatAreas(this.src, this.dst);\n }\n\n public getCellStyle(target: PointType) {\n const { x, y } = target;\n const style: CSSProperties = {};\n const { top, left, bottom, right } = this.src;\n\n switch (this.direction) {\n case 'left': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.left === x && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'right': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.right === x - 1 && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n\n case 'up': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.top === y && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'down': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.bottom === y - 1 && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n }\n return style;\n }\n\n private getDestinationArea(autofillDraggingTo: PointType): AreaType {\n const { x, y } = autofillDraggingTo;\n const { top, left, bottom, right } = this.src;\n switch (this.direction) {\n case 'left':\n return { top, bottom, left: x, right: left - 1 };\n case 'right':\n return { top, bottom, left: right + 1, right: x };\n case 'up':\n return { left, right, top: y, bottom: top - 1 };\n case 'down':\n return { left, right, top: bottom + 1, bottom: y };\n }\n return this.src;\n }\n\n private suggestDirection(draggingTo: PointType): Direction {\n const { top, left, bottom, right } = this.src;\n let horizontal = 0,\n vertical = 0;\n if (draggingTo.x < left) {\n horizontal = draggingTo.x - left;\n } else if (draggingTo.x > right) {\n horizontal = draggingTo.x - right;\n }\n if (draggingTo.y < top) {\n vertical = draggingTo.y - top;\n } else if (draggingTo.y > bottom) {\n vertical = draggingTo.y - bottom;\n }\n // diagonal\n if (Math.abs(horizontal) > 0 && Math.abs(vertical) > 0) {\n if (Math.abs(horizontal) > Math.abs(vertical)) {\n return horizontal < 0 ? 'left' : 'right';\n }\n return vertical < 0 ? 'up' : 'down';\n }\n if (horizontal !== 0) {\n return horizontal < 0 ? 'left' : 'right';\n }\n if (vertical !== 0) {\n return vertical < 0 ? 'up' : 'down';\n }\n return 'none';\n }\n\n private getChangePatterns(cells: (CellType | null)[], id: string): Generator[] {\n const result: Generator[] = [];\n const groups = groupByType(cells);\n const [orientation, sign] = DirectionMapping[this.direction];\n groups.forEach((group) => {\n const lastValue = sign > 0 ? group.last : group.first;\n switch (group.kind) {\n case 'other': {\n result.push(pass(group.first));\n return;\n }\n case 'formula': {\n const value = group.first;\n const table = this.table;\n\n function* generateFormula() {\n let slide = 0;\n const skip = cells.length * sign;\n while (true) {\n slide += skip;\n yield identifyFormula(value, {\n table,\n dependency: id,\n slideY: orientation === 'vertical' ? slide : 0,\n slideX: orientation === 'horizontal' ? slide : 0,\n });\n }\n }\n result.push(generateFormula());\n return;\n }\n case 'number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateNumber() {\n let value = lastValue;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield value;\n }\n }\n const g = generateNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'date': {\n const next = (d: Date) => {\n return sign > 0 ? group.timeDelta.add(d) : group.timeDelta.sub(d);\n };\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateDate() {\n let value = lastValue as Date;\n while (true) {\n value = next(value);\n yield new Date(value);\n }\n }\n const g = generateDate();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'string+number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateStringNumber() {\n const { prefix } = extractStringNumber(group.first as string);\n const { number: lastNumber } = extractStringNumber(lastValue as string);\n let value = lastNumber;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield `${prefix}${Math.abs(value)}`;\n }\n }\n const g = generateStringNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n }\n });\n return result;\n }\n}\n\nfunction* pass(value: any) {\n while (true) {\n yield value;\n }\n}\n\ntype GroupKind = 'number' | 'date' | 'string+number' | 'formula' | 'other';\n\nconst StringNumberPattern = new RegExp('(.+?)(\\\\d+)$');\n\nconst extractStringNumber = (value: string) => {\n const match = value.match(StringNumberPattern);\n if (match) {\n const [, prefix, n] = match;\n return { prefix, number: Number(n) };\n }\n return { prefix: '', number: 0 };\n};\n\nclass TypedGroup {\n public timeDelta: TimeDelta = TimeDelta.create();\n public numericDelta: number = 0;\n public kind: GroupKind;\n public nexts: any[];\n public first: any;\n public equidistant = true;\n\n constructor(value: any) {\n this.first = value;\n this.nexts = [];\n this.kind = this.discriminate(value);\n }\n private discriminate(value: any): GroupKind {\n const kind = value instanceof Date ? 'date' : typeof value;\n if (kind === 'number' || kind === 'date') {\n return kind;\n }\n if (kind === 'string' && value[0] === '=') {\n return 'formula';\n } else if (kind === 'string' && value.match(StringNumberPattern)) {\n return 'string+number';\n }\n return 'other';\n }\n\n public get last() {\n if (this.nexts.length === 0) {\n return this.first;\n }\n return this.nexts[this.nexts.length - 1];\n }\n\n public add(value: any): TypedGroup | undefined {\n const kind = this.discriminate(value);\n if (this.kind !== kind || kind === 'other' || kind === 'formula') {\n return new TypedGroup(value);\n }\n if (this.nexts.length === 0) {\n switch (kind) {\n case 'date': {\n this.timeDelta = new TimeDelta(value as Date, this.first as Date);\n break;\n }\n case 'number': {\n this.numericDelta = (value as number) - this.first;\n break;\n }\n case 'string+number': {\n const { prefix: prefix1, number: number1 } = extractStringNumber(this.first as string);\n const { prefix: prefix2, number: number2 } = extractStringNumber(value as string);\n if (prefix1 === prefix2) {\n this.numericDelta = number2 - number1;\n }\n break;\n }\n }\n }\n this.nexts.push(value);\n }\n\n public subdivide() {\n if (this.nexts.length === 0) {\n return [];\n }\n\n const news: TypedGroup[] = [];\n\n let lastGroup: TypedGroup = this;\n switch (this.kind) {\n case 'date': {\n const eq = this.nexts.every((v, i) => i === 0 || dayjs(v).isSame(this.timeDelta.add(this.nexts[i - 1])));\n this.equidistant = eq;\n return [];\n }\n case 'number': {\n const eq = this.nexts.every((v, i) => i === 0 || v === this.first + this.numericDelta * (i + 1));\n this.equidistant = eq;\n return [];\n }\n case 'string+number': {\n const { prefix: basePrefix } = extractStringNumber(this.first as string);\n for (let i = 0; i < lastGroup.nexts.length; i++) {\n const next = lastGroup.nexts[i];\n const { prefix, number } = extractStringNumber(next as string);\n if (basePrefix !== prefix) {\n const nexts = this.nexts.splice(i, this.nexts.length);\n lastGroup = new TypedGroup(nexts.splice(0, 1)[0]);\n nexts.forEach(lastGroup.add.bind(lastGroup));\n news.push(lastGroup, ...lastGroup.subdivide());\n break;\n } else {\n const { number: firstNumber } = extractStringNumber(lastGroup.first as string);\n if (number !== firstNumber + (i + 1) * lastGroup.numericDelta) {\n lastGroup.equidistant = false;\n }\n }\n }\n break;\n }\n }\n\n return news;\n }\n}\n\nfunction groupByType(cells: (CellType | null)[]): TypedGroup[] {\n let group = new TypedGroup(cells[0]?.value);\n const groups: TypedGroup[] = [group];\n\n for (let i = 1; i < cells.length; i++) {\n const value = cells[i]?.value;\n const nextGroup = group.add(value);\n if (nextGroup) {\n groups.push(nextGroup);\n group = nextGroup;\n }\n }\n for (let i = groups.length - 1; i >= 0; i--) {\n const group = groups[i];\n groups.splice(i + 1, 0, ...group.subdivide());\n }\n return groups;\n}\n","import {\n StoreType,\n RectType,\n ZoneType,\n PointType,\n RangeType,\n FeedbackType,\n CellsByAddressType,\n AreaType,\n PositionType,\n ModeType,\n RawCellType,\n OperatorType,\n} from '../types';\nimport { zoneToArea, superposeArea, matrixShape, areaShape, areaToZone, zoneShape, restrictZone } from '../lib/structs';\nimport { Table } from '../lib/table';\n\nimport { p2a, a2p } from '../lib/converters';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH } from '../constants';\nimport { initSearchStatement, restrictPoints } from './helpers';\nimport { smartScroll } from '../lib/virtualization';\nimport * as prevention from '../lib/operation';\nimport { Autofill } from '../lib/autofill';\n\nconst resetZone: ZoneType = { startY: -1, startX: -1, endY: -1, endX: -1 };\n\nconst actions: { [s: string]: CoreAction<any> } = {};\n\ntype StoreWithCallback = StoreType & {\n callback?: (store: StoreType) => void;\n};\n\nexport const reducer = <T>(store: StoreType, action: { type: number; value: T }): StoreType => {\n const act: CoreAction<T> | undefined = actions[action.type];\n if (act == null) {\n return store;\n }\n\n const { callback, ...newStore } = act.reduce(store, action.value);\n callback?.(newStore);\n return { ...store, ...newStore };\n};\n\nexport class CoreAction<T> {\n static head = 1;\n private actionId: number = 1;\n\n public reduce(store: StoreType, payload: T): StoreWithCallback {\n return store;\n }\n public call(payload: T): { type: number; value: T } {\n return {\n type: this.actionId,\n value: payload,\n };\n }\n public bind() {\n this.actionId = CoreAction.head++;\n actions[this.actionId] = this;\n return this.call.bind(this);\n }\n}\n\nclass SetSearchQueryAction<T extends string | undefined> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const searchQuery = payload;\n const { tableReactive: tableRef } = store;\n if (tableRef.current == null) {\n return store;\n }\n return {\n ...store,\n ...initSearchStatement(tableRef.current, { ...store, searchQuery }),\n searchQuery,\n };\n }\n}\nexport const setSearchQuery = new SetSearchQueryAction().bind();\n\nclass SetSearchCaseSensitiveAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const searchCaseSensitive = payload;\n const { tableReactive: tableRef } = store;\n if (tableRef.current == null) {\n return store;\n }\n return {\n ...store,\n ...initSearchStatement(tableRef.current, { ...store, searchCaseSensitive }),\n searchCaseSensitive,\n };\n }\n}\nexport const setSearchCaseSensitive = new SetSearchCaseSensitiveAction().bind();\n\nclass SetEditingAddressAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editingAddress: payload,\n };\n }\n}\nexport const setEditingAddress = new SetEditingAddressAction().bind();\n\nclass SetAutofillDraggingToAction<T extends PointType | null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n autofillDraggingTo: payload,\n };\n }\n}\nexport const setAutofillDraggingTo = new SetAutofillDraggingToAction().bind();\n\nclass SubmitAutofillAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const autofill = new Autofill(store, payload);\n const table = autofill.applied;\n const selectingZone = areaToZone(autofill.wholeArea);\n\n return {\n ...store,\n tableReactive: { current: table },\n ...initSearchStatement(table, store),\n ...restrictPoints(store, table),\n selectingZone,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n autofillDraggingTo: null,\n };\n }\n}\nexport const submitAutofill = new SubmitAutofillAction().bind();\n\nclass SetContextMenuPositionAction<T extends PositionType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n contextMenuPosition: payload,\n };\n }\n}\nexport const setContextMenuPosition = new SetContextMenuPositionAction().bind();\n\nclass SetResizingPositionYAction<T extends [number, number, number]> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n resizingPositionY: payload,\n };\n }\n}\nexport const setResizingPositionY = new SetResizingPositionYAction().bind();\n\nclass SetResizingPositionXAction<T extends [number, number, number]> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n resizingPositionX: payload,\n };\n }\n}\nexport const setResizingPositionX = new SetResizingPositionXAction().bind();\n\nclass SetEnteringAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n entering: payload,\n };\n }\n}\nexport const setEntering = new SetEnteringAction().bind();\n\nclass UpdateTableAction<T extends Table> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n tableReactive: { current: payload },\n ...initSearchStatement(payload, store),\n ...restrictPoints(store, payload),\n };\n }\n}\nexport const updateTable = new UpdateTableAction().bind();\n\nclass SetEditorRectAction<T extends RectType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editorRect: payload,\n };\n }\n}\nexport const setEditorRect = new SetEditorRectAction().bind();\n\nclass SetDragging<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n dragging: payload,\n };\n }\n}\nexport const setDragging = new SetDragging().bind();\n\nclass BlurAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editingAddress: '',\n };\n }\n}\nexport const blur = new BlurAction().bind();\n\nclass CopyAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n return {\n ...store,\n callback: ({ tableReactive: tableRef }) => {\n table.wire.transmit({\n copyingSheetId: table.sheetId,\n copyingZone: payload,\n cutting: false,\n });\n },\n };\n }\n}\nexport const copy = new CopyAction().bind();\n\nclass CutAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n return {\n ...store,\n callback: ({ tableReactive: tableRef }) => {\n table.wire.transmit({\n copyingSheetId: table.sheetId,\n copyingZone: payload,\n cutting: true,\n });\n },\n };\n }\n}\nexport const cut = new CutAction().bind();\n\nclass PasteAction<T extends { matrix: RawCellType[][]; onlyValue: boolean }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { choosing, selectingZone, tableReactive: dstTableRef } = store;\n const dstTable = dstTableRef.current;\n if (!dstTable) {\n return store;\n }\n const { wire } = dstTable;\n const { copyingSheetId, copyingZone, cutting } = wire;\n const srcTable = dstTable.getTableBySheetId(copyingSheetId);\n\n let selectingArea = zoneToArea(selectingZone);\n const copyingArea = zoneToArea(copyingZone);\n const { matrix, onlyValue } = payload;\n\n if (cutting) {\n if (!srcTable) {\n return store;\n }\n const src = copyingArea;\n const { height: h, width: w } = areaShape(copyingArea);\n const dst: AreaType =\n selectingArea.top !== -1\n ? {\n top: selectingArea.top,\n left: selectingArea.left,\n bottom: selectingArea.top + h,\n right: selectingArea.left + w,\n }\n : {\n top: choosing.y,\n left: choosing.x,\n bottom: choosing.y + h,\n right: choosing.x + w,\n };\n\n const nextSelectingZone = restrictZone(areaToZone(dst));\n const newTable = dstTable.move({\n srcTable,\n src,\n dst,\n operator: 'USER',\n undoReflection: {\n sheetId: srcTable.sheetId,\n selectingZone: nextSelectingZone,\n choosing,\n transmit: { copyingSheetId: srcTable.sheetId, copyingZone, cutting: true },\n },\n redoReflection: {\n sheetId: srcTable.sheetId,\n choosing,\n transmit: { copyingSheetId: srcTable.sheetId, copyingZone: resetZone },\n },\n });\n\n return {\n ...store,\n ...initSearchStatement(newTable, store),\n tableReactive: { current: newTable },\n selectingZone: nextSelectingZone,\n inputting: newTable.stringify({ point: choosing, refEvaluation: 'RAW' }),\n callback: ({ tableReactive: tableRef }) => {\n wire.transmit({\n cutting: false,\n copyingZone: resetZone,\n });\n },\n };\n }\n\n let newTable: Table;\n let { y, x } = choosing;\n\n if (copyingArea.top === -1) {\n const { height, width } = matrixShape({ matrix, base: -1 });\n selectingArea = {\n top: y,\n left: x,\n bottom: y + height,\n right: x + width,\n };\n const nextSelectingZone = restrictZone(areaToZone(selectingArea));\n newTable = dstTable.writeRawCellMatrix({\n point: { y, x },\n matrix,\n onlyValue,\n undoReflection: {\n sheetId: dstTable.sheetId,\n selectingZone: nextSelectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: dstTable.sheetId,\n selectingZone: nextSelectingZone,\n choosing,\n },\n });\n } else {\n if (srcTable == null) {\n return store;\n }\n let { height, width } = areaShape(copyingArea);\n if (selectingArea.top !== -1) {\n y = selectingArea.top;\n x = selectingArea.left;\n const superposed = superposeArea(selectingArea, copyingArea);\n height = superposed.height;\n width = superposed.width;\n }\n selectingArea = { top: y, left: x, bottom: y + height, right: x + width };\n newTable = dstTable.copy({\n srcTable,\n src: copyingArea,\n dst: selectingArea,\n onlyValue,\n operator: 'USER',\n undoReflection: {\n sheetId: srcTable.sheetId,\n transmit: { copyingZone },\n choosing,\n selectingZone,\n },\n redoReflection: {\n sheetId: srcTable.sheetId,\n transmit: { copyingSheetId: srcTable.sheetId, copyingZone: resetZone },\n choosing,\n selectingZone: areaToZone(selectingArea),\n },\n });\n }\n\n const nextSelectingZone = restrictZone(areaToZone(selectingArea));\n return {\n ...store,\n tableReactive: { current: newTable },\n selectingZone: nextSelectingZone,\n inputting: newTable.stringify({ point: choosing, refEvaluation: 'RAW' }),\n ...initSearchStatement(newTable, store),\n callback: ({ tableReactive: tableRef }) => {\n wire.transmit({\n copyingZone: resetZone,\n });\n },\n };\n }\n}\nexport const paste = new PasteAction().bind();\n\nclass EscapeAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n return {\n ...store,\n editingAddress: '',\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n callback: ({ tableReactive: tableRef }) => {\n tableRef.current!.wire.transmit({\n copyingZone: resetZone,\n cutting: false,\n });\n },\n };\n }\n}\nexport const escape = new EscapeAction().bind();\n\nclass ChooseAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n choosing: payload,\n entering: true,\n };\n }\n}\nexport const choose = new ChooseAction().bind();\n\nclass SelectAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n selectingZone: payload,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n };\n }\n}\nexport const select = new SelectAction().bind();\n\nclass SelectRowsAction<T extends { range: RangeType; numCols: number }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { range, numCols } = payload;\n const { start, end } = range;\n const selectingZone = {\n startY: start,\n startX: 1,\n endY: end,\n endX: numCols,\n };\n return {\n ...store,\n selectingZone,\n choosing: { y: start, x: 0 },\n leftHeaderSelecting: true,\n topHeaderSelecting: false,\n };\n }\n}\nexport const selectRows = new SelectRowsAction().bind();\n\nclass SelectColsAction<T extends { range: RangeType; numRows: number }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { range, numRows } = payload;\n const { start, end } = range;\n const selectingZone = {\n startY: 1,\n startX: start,\n endY: numRows,\n endX: end,\n };\n\n return {\n ...store,\n selectingZone,\n choosing: { y: 0, x: start },\n leftHeaderSelecting: false,\n topHeaderSelecting: true,\n };\n }\n}\nexport const selectCols = new SelectColsAction().bind();\n\nclass DragAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { startY, startX } = store.selectingZone;\n const selectingZone = {\n startY,\n startX,\n endY: payload.y,\n endX: payload.x,\n };\n if (startY === payload.y && startX === payload.x) {\n selectingZone.endY = -1;\n selectingZone.endX = -1;\n }\n return { ...store, selectingZone };\n }\n}\nexport const drag = new DragAction().bind();\n\nclass SearchAction<T extends number> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { matchingCells } = store;\n let { matchingCellIndex, choosing } = store;\n matchingCellIndex += payload;\n if (matchingCellIndex >= matchingCells.length) {\n matchingCellIndex = 0;\n } else if (matchingCellIndex < 0) {\n matchingCellIndex = matchingCells.length - 1;\n }\n\n if (matchingCells.length > 0) {\n const address = matchingCells[matchingCellIndex];\n choosing = a2p(address);\n }\n return { ...store, matchingCells, matchingCellIndex, choosing };\n }\n}\nexport const search = new SearchAction().bind();\n\nclass WriteAction<T extends { value: string; point?: PointType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n let { value, point } = payload;\n const { choosing, selectingZone, tableReactive: tableRef } = store;\n if (point == null) {\n point = choosing;\n }\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n const newTable = table.write({\n point: point,\n value,\n operator: 'USER',\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing: point,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing: point,\n },\n });\n return {\n ...store,\n ...initSearchStatement(newTable, store),\n tableReactive: { current: newTable },\n callback: ({ tableReactive: tableRef }) => {\n table.wire.transmit({\n copyingZone: resetZone,\n });\n },\n };\n }\n}\nexport const write = new WriteAction().bind();\n\nclass ClearAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { choosing, selectingZone, tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n\n let selectingArea = zoneToArea(selectingZone);\n if (selectingArea.top === -1) {\n const { y, x } = choosing;\n selectingArea = { top: y, left: x, bottom: y, right: x };\n }\n const { top, left, bottom, right } = selectingArea;\n const diff: CellsByAddressType = {};\n let diffCount = 0;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = table.getCellByPoint({ y, x }, 'SYSTEM');\n const address = p2a({ y, x });\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n continue;\n }\n if (cell?.value != null) {\n diff[address] = { value: null };\n diffCount++;\n }\n }\n }\n if (diffCount === 0) {\n return store;\n }\n table.update({\n diff,\n partial: true,\n operator: 'USER',\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n return {\n ...store,\n ...initSearchStatement(table, store),\n tableReactive: { current: table },\n };\n }\n}\nexport const clear = new ClearAction().bind();\n\nclass UndoAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n const { history, callback } = table.undo();\n if (history == null) {\n return store;\n }\n if (history.dstSheetId !== table.sheetId) {\n const { dispatch, store: dstStore } = table.wire.contextsBySheetId[history.dstSheetId];\n dispatch(setStore({ ...dstStore, ...history.undoReflection }));\n return store;\n }\n return {\n ...store,\n ...restrictPoints(store, table),\n ...history.undoReflection,\n ...initSearchStatement(table, store),\n tableReactive: { current: table },\n callback,\n };\n }\n}\nexport const undo = new UndoAction().bind();\n\nclass RedoAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n const { history, newTable, callback } = table.redo();\n if (history == null) {\n return store;\n }\n if (history.dstSheetId !== table.sheetId) {\n const { dispatch, store: dstStore } = table.wire.contextsBySheetId[history.dstSheetId];\n dispatch(setStore({ ...dstStore, ...history.redoReflection }));\n return store;\n }\n return {\n ...store,\n ...restrictPoints(store, table),\n ...history.redoReflection,\n ...initSearchStatement(table, store),\n tableReactive: { current: table },\n callback,\n };\n }\n}\nexport const redo = new RedoAction().bind();\n\nclass ArrowAction<\n T extends {\n shiftKey: boolean;\n deltaY: number;\n deltaX: number;\n numRows: number;\n numCols: number;\n },\n> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { shiftKey, deltaY, deltaX, numRows, numCols } = payload;\n const { choosing, tableReactive: tableRef, tabularRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n let { selectingZone } = store;\n const { y, x } = choosing;\n if (shiftKey) {\n const [dragEndY, dragEndX] = [\n selectingZone.endY === -1 ? y : selectingZone.endY,\n selectingZone.endX === -1 ? x : selectingZone.endX,\n ];\n const [nextY, nextX] = [dragEndY + deltaY, dragEndX + deltaX];\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n selectingZone =\n y === nextY && x === nextX\n ? { startY: -1, startX: -1, endY: -1, endX: -1 }\n : { startY: y, startX: x, endY: nextY, endX: nextX };\n return {\n ...store,\n selectingZone,\n };\n }\n const [nextY, nextX] = [y + deltaY, x + deltaX];\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n let { y: editorTop, x: editorLeft, height, width } = store.editorRect;\n if (deltaY > 0) {\n for (let i = y; i < nextY; i++) {\n editorTop += table.getCellByPoint({ y: i, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n }\n } else if (deltaY < 0) {\n for (let i = y - 1; i >= nextY; i--) {\n editorTop -= table.getCellByPoint({ y: i, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n }\n }\n if (deltaX > 0) {\n for (let i = x; i < nextX; i++) {\n editorLeft += table.getCellByPoint({ y: 0, x: i }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n }\n } else if (deltaX < 0) {\n for (let i = x - 1; i >= nextX; i--) {\n editorLeft -= table.getCellByPoint({ y: 0, x: i }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n }\n }\n\n const cell = table.getCellByPoint({ y: nextY, x: nextX }, 'SYSTEM');\n height = cell?.height || DEFAULT_HEIGHT;\n width = cell?.width || DEFAULT_WIDTH;\n\n smartScroll(table, tabularRef.current, { y: nextY, x: nextX });\n return {\n ...store,\n selectingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n choosing: { y: nextY, x: nextX } as PointType,\n editorRect: { y: editorTop, x: editorLeft, height, width },\n };\n }\n}\nexport const arrow = new ArrowAction().bind();\n\nclass WalkAction<\n T extends {\n deltaY: number;\n deltaX: number;\n numRows: number;\n numCols: number;\n },\n> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, numCols } = payload;\n let { deltaY, deltaX } = payload;\n const { choosing, selectingZone, tableReactive: tableRef, tabularRef: gridOuterRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n\n let { y: editorTop, x: editorLeft, height, width } = store.editorRect;\n const { y, x } = choosing;\n const selectingArea = zoneToArea(selectingZone);\n const { top, left, bottom, right } = selectingArea;\n let [nextY, nextX] = [y + deltaY, x + deltaX];\n if (nextY < top && top !== -1) {\n deltaY = bottom - nextY;\n nextY = bottom;\n if (nextX > left) {\n nextX--;\n deltaX--;\n } else {\n deltaX = right - nextX;\n nextX = right;\n }\n }\n if (nextY > bottom && bottom !== -1) {\n deltaY = top - nextY;\n nextY = top;\n if (nextX < right) {\n nextX++;\n deltaX++;\n } else {\n deltaX = left - nextX;\n nextX = left;\n }\n }\n if (nextX < left && left !== -1) {\n deltaX = right - nextX;\n nextX = right;\n if (nextY > top) {\n nextY--;\n deltaY--;\n } else {\n deltaY = bottom - nextY;\n nextY = bottom;\n }\n }\n if (nextX > right && right !== -1) {\n deltaX = left - nextX;\n nextX = left;\n if (nextY < bottom) {\n nextY++;\n deltaY++;\n } else {\n deltaY = top - nextY;\n nextY = top;\n }\n }\n\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n if (deltaY > 0) {\n for (let i = y; i < nextY; i++) {\n editorTop += table.getCellByPoint({ y: i, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n }\n } else if (deltaY < 0) {\n for (let i = y - 1; i >= nextY; i--) {\n editorTop -= table.getCellByPoint({ y: i, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n }\n }\n if (deltaX > 0) {\n for (let i = x; i < nextX; i++) {\n editorLeft += table.getCellByPoint({ y: 0, x: i }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n }\n } else if (deltaX < 0) {\n for (let i = x - 1; i >= nextX; i--) {\n editorLeft -= table.getCellByPoint({ y: 0, x: i }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n }\n }\n const cell = table.getCellByPoint({ y: nextY, x: nextX }, 'SYSTEM');\n height = cell?.height || DEFAULT_HEIGHT;\n width = cell?.width || DEFAULT_WIDTH;\n smartScroll(table, gridOuterRef.current, { y: nextY, x: nextX });\n return {\n ...store,\n choosing: { y: nextY, x: nextX } as PointType,\n editorRect: { y: editorTop, x: editorLeft, height, width },\n };\n }\n}\nexport const walk = new WalkAction().bind();\n\nclass SetInputtingAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n inputting: payload,\n };\n }\n}\n\nexport const setInputting = new SetInputtingAction().bind();\n\nclass InsertRowsAboveAction<T extends { numRows: number; y: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, y, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n table.insertRows({\n y,\n numRows,\n baseY: y,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n return {\n ...store,\n ...table.getTotalSize(),\n tableReactive: { current: table },\n };\n }\n}\nexport const insertRowsAbove = new InsertRowsAboveAction().bind();\n\nclass InsertRowsBelowAction<T extends { numRows: number; y: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, y, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing, editorRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n const nextSelectingZone = {\n ...selectingZone,\n startY: selectingZone.startY + numRows,\n endY: selectingZone.endY + numRows,\n };\n const nextChoosing = { ...choosing, y: choosing.y + numRows };\n\n table.insertRows({\n y: y + 1,\n numRows,\n baseY: y,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n },\n });\n return {\n ...store,\n ...table.getTotalSize(),\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n tableReactive: { current: table },\n };\n }\n}\nexport const insertRowsBelow = new InsertRowsBelowAction().bind();\n\nclass InsertColsLeftAction<T extends { numCols: number; x: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numCols, x, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing, editorRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n\n table.insertCols({\n x,\n numCols,\n baseX: x,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n return {\n ...store,\n ...table.getTotalSize(),\n tableReactive: { current: table },\n };\n }\n}\nexport const insertColsLeft = new InsertColsLeftAction().bind();\n\nclass InsertColsRightAction<T extends { numCols: number; x: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numCols, x, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n const nextSelectingZone = {\n ...selectingZone,\n startX: selectingZone.startX + numCols,\n endX: selectingZone.endX + numCols,\n };\n const nextChoosing = { ...choosing, x: choosing.x + numCols };\n\n selectingZone.startX += numCols;\n selectingZone.endX += numCols;\n\n table.insertCols({\n x: x + 1,\n numCols,\n baseX: x,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n },\n });\n return {\n ...store,\n ...table.getTotalSize(),\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n tableReactive: { current: table },\n };\n }\n}\nexport const insertColsRight = new InsertColsRightAction().bind();\n\nclass RemoveRowsAction<T extends { numRows: number; y: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, y, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing, editorRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n\n table.removeRows({\n y,\n numRows,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n sheetHeight: store.sheetHeight,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n\n return {\n ...store,\n ...table.getTotalSize(),\n tableReactive: { current: table },\n };\n }\n}\nexport const removeRows = new RemoveRowsAction().bind();\n\nclass RemoveColsAction<T extends { numCols: number; x: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numCols, x, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing, editorRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n\n table.removeCols({\n x,\n numCols,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n sheetWidth: store.sheetWidth,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n\n return {\n ...store,\n ...table.getTotalSize(),\n tableReactive: { current: table },\n };\n }\n}\nexport const removeCols = new RemoveColsAction().bind();\n\nclass setStoreAction<T extends Partial<StoreType>> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n ...payload,\n };\n }\n}\nexport const setStore = new setStoreAction().bind();\n\nexport const userActions = {\n blur,\n copy,\n cut,\n paste,\n escape,\n choose,\n select,\n selectRows,\n selectCols,\n drag,\n search,\n write,\n clear,\n undo,\n redo,\n arrow,\n walk,\n insertRowsAbove,\n insertRowsBelow,\n insertColsLeft,\n insertColsRight,\n removeRows,\n removeCols,\n};\n","import type { StoreType, AreaType, PointType } from '../types';\n\nimport { zoneToArea } from './structs';\nimport type { Table } from './table';\n\nexport const clip = (store: StoreType) => {\n const { selectingZone, choosing, editorRef, tableReactive: tableRef } = store;\n const table = tableRef.current;\n\n if (!table) {\n return { top: 0, left: 0, bottom: 0, right: 0 };\n }\n\n const { y, x } = choosing;\n const selectingArea = zoneToArea(selectingZone);\n let area = selectingArea;\n if (area.left === -1) {\n area = { top: y, left: x, bottom: y, right: x };\n }\n const input = editorRef.current;\n const trimmed = table.trim(area);\n const tsv = table2tsv(trimmed);\n const html = table2html(trimmed);\n\n if (navigator.clipboard) {\n const tsvBlob = new Blob([tsv], { type: 'text/plain' });\n const htmlBlob = new Blob([html], { type: 'text/html' });\n\n navigator.clipboard.write([\n new ClipboardItem({\n 'text/plain': tsvBlob,\n 'text/html': htmlBlob,\n }),\n ]);\n } else if (input != null) {\n input.value = tsv;\n input.focus();\n input.select();\n document.execCommand('copy');\n input.value = '';\n input.blur();\n }\n return area;\n};\n\nconst table2tsv = (table: Table): string => {\n const lines: string[] = [];\n for (let y = table.top; y <= table.bottom; y++) {\n const cols: string[] = [];\n for (let x = table.left; x <= table.right; x++) {\n const point: PointType = { y, x };\n const policy = table.getPolicyByPoint(point);\n const value = policy.onClip({ point, table });\n if (value.indexOf('\\n') !== -1) {\n cols.push(`\"${value.replace(/\"/g, '\"\"')}\"`);\n } else {\n cols.push(value);\n }\n }\n lines.push(cols.join('\\t'));\n }\n return lines.join('\\n');\n};\n\nconst table2html = (table: Table): string => {\n const lines: string[] = [];\n for (let y = table.top; y <= table.bottom; y++) {\n const cols: string[] = [];\n for (let x = table.left; x <= table.right; x++) {\n const point: PointType = { y, x };\n const policy = table.getPolicyByPoint(point);\n const value = policy.onClip({ point, table });\n const valueEscaped = value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n cols.push(`<td>${valueEscaped}</td>`);\n }\n lines.push(`<tr>${cols.join('')}</tr>`);\n }\n return `<table>${lines.join('')}</table>`;\n};\n","export const escapeSheetName = (name: string): string => {\n const escaped = name.replace(/'/g, \"''\");\n return `'${escaped}'`;\n};\n\nexport const getSheetPrefix = (name?: string): string => {\n if (name) {\n return `${escapeSheetName(name)}!`;\n }\n return '';\n};\n","import type { PointType } from '../types';\nimport type { Table } from './table';\nimport { Lexer, splitRef } from '../formula/evaluator';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH } from '../constants';\nimport { a2p, grantAddressAbsolute } from './converters';\nimport { getSheetPrefix } from './sheet';\n\nexport const insertTextAtCursor = (input: HTMLTextAreaElement, text: string) => {\n input.focus();\n const deprecated = !document.execCommand?.('insertText', false, text);\n if (!deprecated) {\n return;\n }\n input.setRangeText(text, input.selectionStart, input.selectionEnd, 'end');\n return;\n};\n\ntype InsertRefProps = {\n input: HTMLTextAreaElement | null;\n ref: string;\n dryRun?: boolean;\n};\n\nexport const insertRef = ({ input, ref, dryRun = false }: InsertRefProps): boolean => {\n // dryRun is used to check if the ref can be inserted without actually inserting it\n if (!input?.value?.startsWith('=') || input.selectionStart === 0) {\n return false;\n }\n const lexer = new Lexer(input.value.substring(1));\n lexer.tokenize();\n const [tokenIndex, _] = lexer.getTokenIndexByCharPosition(input.selectionStart - 1);\n let token = lexer.tokens[tokenIndex];\n if (token?.type === 'SPACE') {\n token = lexer.tokens[tokenIndex - 1];\n }\n if (\n token == null ||\n token.type === 'OPEN' ||\n token.type === 'COMMA' ||\n token.type === 'INFIX_OPERATOR' ||\n token.type === 'PREFIX_OPERATOR'\n ) {\n if (!dryRun) {\n insertTextAtCursor(input, ref);\n }\n } else if (token.type === 'REF' || token.type === 'RANGE') {\n if (!dryRun) {\n // keep the absolute/relative state of the token\n const { sheetName: refSheetName, addresses: refAddresses } = splitRef(ref);\n const { addresses: tokenAddresses } = splitRef(token.entity as string);\n\n const tokenAbsolutes = tokenAddresses.map((a) => a2p(a));\n if (tokenAddresses.length === 2 && refAddresses.length === 1) {\n refAddresses.push(refAddresses[0]);\n }\n ref =\n getSheetPrefix(refSheetName) +\n refAddresses\n .map((r, i) => {\n return grantAddressAbsolute(r, !!tokenAbsolutes[i]?.absX, !!tokenAbsolutes[i]?.absY);\n })\n .join(':');\n\n const [start, end] = lexer.getTokenPositionRange(tokenIndex + 1, 1);\n input.setSelectionRange(start, end);\n insertTextAtCursor(input, ref);\n }\n } else {\n return false;\n }\n return true;\n};\n\nexport const isRefInsertable = (input: HTMLTextAreaElement | null): boolean => {\n return insertRef({ input, ref: '', dryRun: true });\n};\n\nexport const expandInput = (input: HTMLTextAreaElement | null) => {\n if (input == null) {\n return;\n }\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n};\n\nexport const resetInput = (input: HTMLTextAreaElement | null, table: Table, point: PointType) => {\n const style = input?.style;\n if (style == null) {\n return;\n }\n const width = table.getCellByPoint({ x: point.x, y: 0 }, 'SYSTEM')?.width ?? DEFAULT_WIDTH;\n const height = table.getCellByPoint(point, 'SYSTEM')?.height ?? DEFAULT_HEIGHT;\n style.width = `${width}px`;\n style.height = `${height}px`;\n};\n\nexport const isFocus = (input: HTMLTextAreaElement | null): boolean => {\n if (typeof window === 'undefined' || input == null) {\n return false;\n }\n return document.activeElement === input;\n};\n","export const COLOR_PALETTE = [\n // orange\n '#FF6600',\n // purple\n '#AA44FF',\n // emeraldblue\n '#00CCCC',\n // peach\n '#EEAAEE',\n // yellow\n '#DDDD00',\n // winered\n '#AA4444',\n // lightgreen\n '#00FF00',\n // pink\n '#FF00FF',\n // navy\n '#3366FF',\n];\n","import { useEffect, useState, useRef } from 'react';\n\n// Return the document object with SSR.\nexport const useBrowser = () => {\n const [ok, setOk] = useState(false);\n useEffect(() => {\n setOk(true);\n }, []);\n if (ok && typeof window !== 'undefined') {\n return { window, document };\n }\n return { window: null, document: null };\n};\n\nexport const useDebounce = <T>(value: T, delay = 100) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n const timerRef = useRef<number>();\n\n useEffect(() => {\n timerRef.current = window.setTimeout(() => setDebouncedValue(value), delay);\n return () => {\n window.clearTimeout(timerRef.current);\n };\n }, [value, delay]);\n return debouncedValue;\n};\n\nexport const useDebounceCallback = (callback: (...args: any[]) => void, delay = 100) => {\n const debouncedCallback = useRef(callback);\n const timerRef = useRef<number>();\n\n useEffect(() => {\n debouncedCallback.current = callback;\n }, [callback]);\n\n return (...args: any[]) => {\n window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => {\n debouncedCallback.current(...args);\n }, delay);\n };\n};\n","import type { CSSProperties, FC, ReactNode } from 'react';\nimport { useBrowser } from './hooks';\nimport { createPortal } from 'react-dom';\n\ntype Props = {\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n [attr: string]: any;\n};\n\nexport const Fixed: FC<Props> = ({ children, style, className = '', ...attrs }) => {\n const { document } = useBrowser();\n if (document == null) {\n return null;\n }\n return createPortal(\n <div {...attrs} className={`gs-fixed ${className}`} style={style}>\n {children}\n </div>,\n document.body,\n );\n};\n","import React, { type CSSProperties } from 'react';\nimport type { RawCellType } from '../types';\nexport const parseHTML = (html: string, onlyValue = false): RawCellType[][] => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const results: RawCellType[][] = [];\n\n const processTable = (table: HTMLTableElement) => {\n const spans = new Set<string>();\n const rows = table.querySelectorAll('tr,caption');\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (row.tagName === 'CAPTION') {\n const caption = row.textContent?.trim() ?? '';\n if (caption) {\n results.push([{ value: caption }]);\n }\n continue;\n }\n const cells = Array.from(row.querySelectorAll('td, th'));\n const result: RawCellType[] = [];\n let j = 0;\n for (const cell of cells) {\n const value = cell.textContent?.trim() ?? '';\n const style: CSSProperties | undefined = onlyValue\n ? undefined\n : (() => {\n const childStyle = parseStyleString(cell.firstElementChild);\n const parentStyle = parseStyleString(cell);\n return { ...parentStyle, ...childStyle };\n })();\n while (spans.has(`${i}-${++j}`)) {\n result.push({ value: '', style, skip: true });\n }\n result.push({ value, style });\n\n const rowSpan = parseInt(cell.getAttribute('rowspan') ?? '1', 10);\n const colSpan = parseInt(cell.getAttribute('colspan') ?? '1', 10);\n for (let r = 0; r < rowSpan; r++) {\n for (let c = 0; c < colSpan; c++) {\n spans.add(`${i + r}-${j + c}`);\n }\n }\n }\n results.push(result);\n }\n };\n\n const processNodeSequentially = (node: Node, currentLine: RawCellType[] = []) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName;\n\n if (tagName === 'TABLE') {\n if (currentLine.length > 0) {\n results.push(currentLine.slice());\n currentLine.length = 0;\n }\n processTable(el as HTMLTableElement);\n } else if (tagName === 'BR') {\n results.push(currentLine.slice());\n currentLine.length = 0;\n } else if (blockTags.has(tagName)) {\n if (currentLine.length > 0) {\n results.push(currentLine.slice());\n currentLine.length = 0;\n }\n el.childNodes.forEach((child) => processNodeSequentially(child, currentLine));\n if (currentLine.length > 0) {\n results.push(currentLine.slice());\n currentLine.length = 0;\n }\n } else {\n el.childNodes.forEach((child) => processNodeSequentially(child, currentLine));\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent ?? '';\n const lines = text.split(/\\r?\\n/);\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed) {\n currentLine.push({ value: trimmed });\n }\n }\n }\n };\n\n const currentLine: RawCellType[] = [];\n doc.body.childNodes.forEach((node) => processNodeSequentially(node, currentLine));\n if (currentLine.length > 0) {\n results.push(currentLine);\n }\n\n return results;\n};\n\nfunction parseStyleString(element: Element | null): React.CSSProperties | undefined {\n if (!element) {\n return undefined;\n }\n const styleString = element.getAttribute('style') ?? '';\n const styleObj: React.CSSProperties = {};\n\n styleString.split(';').forEach((d) => {\n let [rawKey, rawValue] = d.split(':');\n if (!rawKey || !rawValue) {\n return;\n }\n rawKey = rawKey.trim();\n if (rawKey === 'height' || rawKey === 'width') {\n return;\n }\n const key = rawKey.trim().replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n if (key === 'float' || key === 'display' || key.startsWith('padding')) {\n return;\n }\n if (key === 'border') {\n Object.assign(styleObj, {\n borderTop: rawValue,\n borderRight: rawValue,\n borderBottom: rawValue,\n borderLeft: rawValue,\n });\n return;\n }\n if (key === 'borderColor') {\n Object.assign(styleObj, {\n borderTopColor: rawValue,\n borderRightColor: rawValue,\n borderBottomColor: rawValue,\n borderLeftColor: rawValue,\n });\n return;\n }\n if (key === 'borderStyle') {\n Object.assign(styleObj, {\n borderTopStyle: rawValue,\n borderRightStyle: rawValue,\n borderBottomStyle: rawValue,\n borderLeftStyle: rawValue,\n });\n return;\n }\n if (key === 'borderWidth') {\n Object.assign(styleObj, {\n borderTopWidth: rawValue,\n borderRightWidth: rawValue,\n borderBottomWidth: rawValue,\n borderLeftWidth: rawValue,\n });\n return;\n }\n const value = rawValue.trim();\n (styleObj as any)[key] = value;\n });\n\n return styleObj;\n}\n\nexport const parseText = (tsv: string, sep = '\\t'): RawCellType[][] => {\n tsv = tsv.replace(/\"\"/g, '\\x00');\n const rows: RawCellType[][] = [[]];\n let row = rows[0];\n let entering = false;\n let word = '';\n for (let i = 0; i < tsv.length; i++) {\n const s = tsv[i];\n if (s === '\\n' && !entering) {\n row.push({ value: restoreDoubleQuote(word) });\n word = '';\n row = [];\n rows.push(row);\n continue;\n }\n if (s === sep) {\n row.push({ value: restoreDoubleQuote(word) });\n word = '';\n continue;\n }\n if (s === '\"' && !entering && word === '') {\n entering = true;\n continue;\n }\n if (s === '\"' && entering) {\n entering = false;\n continue;\n }\n word += s;\n }\n if (word) {\n row.push({ value: restoreDoubleQuote(word) });\n }\n return rows;\n};\n\nconst restoreDoubleQuote = (text: string) => text.replace(/\\x00/g, '\"');\n\nconst blockTags = new Set([\n 'ADDRESS',\n 'ARTICLE',\n 'ASIDE',\n 'BLOCKQUOTE',\n 'DETAILS',\n 'DIALOG',\n 'DD',\n 'DIV',\n 'DL',\n 'DT',\n 'FIELDSET',\n 'FIGCAPTION',\n 'FIGURE',\n 'FOOTER',\n 'FORM',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'H5',\n 'H6',\n 'HEADER',\n 'HR',\n 'LI',\n 'MAIN',\n 'NAV',\n 'OL',\n 'P',\n 'PRE',\n 'SECTION',\n 'TABLE',\n 'UL',\n]);\n","import type { FC, KeyboardEvent } from 'react';\nimport { useContext, useEffect, useState, useCallback, memo } from 'react';\nimport { x2c, y2r } from '../lib/converters';\nimport { clip } from '../lib/clipboard';\nimport {\n clear,\n escape,\n select,\n setEditingAddress,\n undo,\n redo,\n arrow,\n walk,\n write,\n copy,\n cut,\n paste,\n setSearchQuery,\n setEntering,\n setInputting,\n updateTable,\n} from '../store/actions';\n\nimport { Context } from '../store';\nimport { areaToZone, zoneToArea } from '../lib/structs';\nimport * as prevention from '../lib/operation';\nimport { expandInput, insertTextAtCursor, isRefInsertable, resetInput } from '../lib/input';\nimport { Lexer } from '../formula/evaluator';\nimport { COLOR_PALETTE } from '../lib/palette';\nimport { CursorStateType, EditorEventWithNativeEvent, FeedbackType, ModeType } from '../types';\nimport { Fixed } from './Fixed';\nimport { parseHTML, parseText } from '../lib/paste';\nimport React from 'react';\n\ntype Props = {\n mode: ModeType;\n};\n\nexport const Editor: FC<Props> = ({ mode }: Props) => {\n const { store, dispatch } = useContext(Context);\n const [selected, setSelected] = useState(0);\n const [shiftKey, setShiftKey] = useState(false);\n const {\n choosing,\n inputting,\n selectingZone,\n editorRect,\n editingAddress,\n entering,\n matchingCells,\n matchingCellIndex,\n searchQuery,\n editorRef,\n largeEditorRef,\n searchInputRef,\n editingOnEnter,\n tableReactive: tableRef,\n sheetId,\n } = store;\n const table = tableRef.current;\n\n if (!table) {\n return null;\n }\n\n const policy = table.getPolicyByPoint(choosing);\n const optionsAll = policy.getOptions();\n const inputLower = inputting.toLocaleLowerCase();\n const filteredOptions = optionsAll\n .map((option) => {\n const keywords = option.keywords ?? [String(option.value)];\n let bestMatch = { index: -1, startsWith: false, keyword: '' };\n\n for (const keyword of keywords) {\n const keywordLower = keyword.toLowerCase();\n const index = keywordLower.indexOf(inputLower);\n if (index !== -1) {\n const startsWith = keywordLower.startsWith(inputLower);\n if (\n bestMatch.index === -1 ||\n index < bestMatch.index ||\n (index === bestMatch.index && startsWith && !bestMatch.startsWith)\n ) {\n bestMatch = { index, startsWith, keyword };\n }\n }\n }\n\n return {\n option,\n ...bestMatch,\n keywordCount: keywords.length, // Add hierarchy (number of keywords)\n };\n })\n .filter(({ index }) => index !== -1)\n .sort((a, b) => {\n // First priority: starts with input\n if (a.startsWith !== b.startsWith) {\n return b.startsWith ? 1 : -1;\n }\n // Second priority: earlier match position\n if (a.index !== b.index) {\n return a.index - b.index;\n }\n // Third priority: more keywords (higher hierarchy)\n if (a.keywordCount !== b.keywordCount) {\n return b.keywordCount - a.keywordCount;\n }\n // Fourth priority: alphabetical order\n return a.keyword.localeCompare(b.keyword);\n })\n .map(({ option }) => option);\n\n useEffect(() => {\n editorRef?.current?.focus?.({ preventScroll: true });\n }, [editorRef]);\n\n useEffect(() => {\n if (table.wire.lastFocused == null) {\n return;\n }\n if (table.wire.lastFocused !== editorRef.current) {\n return;\n }\n if (table.wire.lastFocused !== largeEditorRef.current) {\n return;\n }\n\n dispatch(setEditingAddress(''));\n }, [table.wire.lastFocused, editorRef, largeEditorRef, dispatch]);\n useEffect(() => {\n table.wire.editingSheetId = sheetId;\n table.wire.editingAddress = editingAddress;\n }, [editingAddress, table, sheetId]);\n\n useEffect(() => {\n //table.wire.transmit();\n expandInput(editorRef.current);\n }, [inputting, editingAddress, editorRef]);\n\n const { y, x } = choosing;\n const rowId = `${y2r(y)}`;\n const colId = x2c(x);\n const address = `${colId}${rowId}`;\n const editing = editingAddress === address;\n\n const cell = table.getCellByPoint({ y, x }, 'SYSTEM');\n const valueString = table.stringify({ point: choosing, cell, refEvaluation: 'RAW' });\n const [before, setBefore] = useState<string>(valueString);\n\n const selectValue = useCallback(\n (selected: number) => {\n const option = filteredOptions[selected];\n if (option) {\n const t = table.update({\n diff: { [address]: { value: option.value } },\n partial: true,\n });\n dispatch(updateTable(t.clone()));\n dispatch(setEditingAddress(''));\n dispatch(setInputting(''));\n setSelected(0);\n }\n },\n [filteredOptions, table, address],\n );\n\n useEffect(() => {\n setBefore(valueString);\n dispatch(setInputting(valueString));\n resetInput(editorRef.current, table, choosing);\n }, [choosing, valueString, dispatch, editorRef, table]);\n\n const { y: top, x: left, height, width } = editorRect;\n\n const writeCell = useCallback(\n (value: string) => {\n if (before !== value) {\n dispatch(write({ value }));\n }\n setBefore(value);\n },\n [before],\n );\n\n const numLines = valueString.split('\\n').length;\n const [isKeyDown, setIsKeyDown] = useState(false);\n const handleKeyDown = useCallback(\n (e: EditorEventWithNativeEvent) => {\n if (isKeyDown) {\n return;\n }\n // do not debounce it if control key is down.\n if (!(e.key === 'Meta' || e.key === 'Control')) {\n setIsKeyDown(true);\n requestAnimationFrame(() => {\n setIsKeyDown(false);\n });\n }\n const input = e.currentTarget;\n\n const shiftKey = e.shiftKey;\n switch (e.key) {\n case 'Tab': // TAB\n e.preventDefault();\n if (editing) {\n if (filteredOptions.length) {\n selectValue(selected);\n } else {\n writeCell(input.value);\n dispatch(setEditingAddress(''));\n dispatch(setInputting(''));\n }\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: shiftKey ? -1 : 1,\n }),\n );\n dispatch(setEditingAddress(''));\n return false;\n\n case 'Enter': // ENTER\n if (editing) {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n dispatch(setInputting(input.value));\n e.preventDefault();\n return false;\n } else {\n if (e.nativeEvent.isComposing) {\n return false;\n }\n if (filteredOptions.length) {\n selectValue(selected);\n } else {\n writeCell(input.value);\n dispatch(setEditingAddress(''));\n dispatch(setInputting(''));\n }\n }\n } else if (editingOnEnter && selectingZone.endY === -1) {\n const dblclick = document.createEvent('MouseEvents');\n dblclick.initEvent('dblclick', true, true);\n input.dispatchEvent(dblclick);\n e.preventDefault();\n return false;\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: shiftKey ? -1 : 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n\n case 'Backspace': // BACKSPACE\n if (!editing) {\n dispatch(clear(null));\n dispatch(setInputting(''));\n return false;\n }\n break;\n case 'Shift': // SHIFT\n setShiftKey(true);\n return false;\n\n case 'Control': // CTRL\n return false;\n\n case 'Alt': // OPTION\n return false;\n\n case 'Meta': // COMMAND\n return false;\n\n case 'NumLock': // NUMLOCK\n return false;\n\n case 'Escape': // ESCAPE\n dispatch(escape(null));\n dispatch(setSearchQuery(undefined));\n dispatch(setInputting(before));\n // input.blur();\n return false;\n\n case 'ArrowLeft': // LEFT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: -1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowUp': // UP\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: -1,\n deltaX: 0,\n }),\n );\n return false;\n }\n if (filteredOptions.length > 1) {\n if (selected <= 0) {\n setSelected(filteredOptions.length - 1);\n } else {\n setSelected(selected - 1);\n }\n return true;\n }\n break;\n case 'ArrowRight': // RIGHT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: 1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowDown': // DOWN\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n return false;\n }\n if (filteredOptions.length > 1) {\n if (selected >= filteredOptions.length - 1) {\n setSelected(0);\n } else {\n setSelected(selected + 1);\n }\n return true;\n }\n break;\n case 'a': // A\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(\n select({\n startY: 1,\n startX: 1,\n endY: table.getNumRows(),\n endX: table.getNumCols(),\n }),\n );\n return false;\n }\n }\n break;\n case 'c': // C\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(copy(areaToZone(area)));\n input.focus(); // refocus\n return false;\n }\n return true;\n }\n break;\n case 'f': // F\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (typeof searchQuery === 'undefined') {\n dispatch(setSearchQuery(''));\n }\n dispatch(setEntering(false));\n requestAnimationFrame(() => searchInputRef.current!.focus());\n return false;\n }\n }\n break;\n case 'r': // R\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(redo(null));\n requestAnimationFrame(() => dispatch(setInputting(''))); // resetting textarea\n return false;\n }\n }\n break;\n case 's': // S\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n table.wire.onSave?.({\n table,\n points: {\n pointing: choosing,\n selectingFrom: {\n y: selectingZone.startY,\n x: selectingZone.startX,\n },\n selectingTo: {\n y: selectingZone.endY,\n x: selectingZone.endX,\n },\n },\n });\n return false;\n }\n }\n break;\n case 'v': // V\n if (e.ctrlKey || e.metaKey) {\n // moved to onPaste\n e.stopPropagation();\n return false;\n }\n break;\n case 'x': // X\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(cut(areaToZone(area)));\n input.focus(); // refocus\n\n return false;\n }\n }\n break;\n case 'z': // Z\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (e.shiftKey) {\n dispatch(redo(null));\n //window.setTimeout(() => sync(setInputting('')), 100); // resetting textarea\n } else {\n dispatch(undo(null));\n }\n return false;\n }\n }\n break;\n case ';': // semicolon\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n // MAYBE: need to aware timezone.\n writeCell(new Date().toDateString());\n }\n }\n break;\n }\n if (e.ctrlKey || e.metaKey) {\n return false;\n }\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return false;\n }\n dispatch(setEditingAddress(address));\n if (!editing) {\n dispatch(setInputting(''));\n }\n setSelected(0);\n return false;\n },\n [\n isKeyDown,\n editing,\n filteredOptions,\n selected,\n editingOnEnter,\n selectingZone,\n before,\n table,\n choosing,\n store,\n cell,\n address,\n writeCell,\n searchQuery,\n ],\n );\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n table.wire.lastFocused = e.currentTarget;\n },\n [table],\n );\n\n const handleDoubleClick = useCallback(\n (e: React.MouseEvent<HTMLTextAreaElement>) => {\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return;\n }\n const input = e.currentTarget;\n if (!editing) {\n dispatch(setInputting(valueString));\n dispatch(setEditingAddress(address));\n requestAnimationFrame(() => {\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n const length = new String(valueString).length;\n input.setSelectionRange(length, length);\n });\n }\n },\n [cell, editing, valueString, address],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n if (isRefInsertable(e.currentTarget)) {\n return true;\n } else {\n if (editing) {\n writeCell(e.currentTarget.value);\n }\n }\n dispatch(setEditingAddress(''));\n },\n [editing, writeCell],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n return;\n }\n dispatch(setInputting(e.currentTarget.value));\n setSelected(0);\n },\n [cell],\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (editing) {\n return true;\n }\n\n const onlyValue = shiftKey;\n const html = e.clipboardData?.getData?.('text/html');\n if (html) {\n dispatch(paste({ matrix: parseHTML(html), onlyValue }));\n } else {\n const text = e.clipboardData?.getData?.('text/plain');\n if (text) {\n dispatch(paste({ matrix: parseText(text), onlyValue }));\n } else {\n console.warn('No clipboard data found.');\n }\n }\n e.preventDefault();\n e.stopPropagation();\n return false;\n },\n [editing, shiftKey],\n );\n\n const handleKeyUpInternal = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n setShiftKey(false);\n const selectingArea = zoneToArea(store.selectingZone);\n table.wire.onKeyUp?.({\n e,\n points: {\n pointing: choosing,\n selectingFrom: { y: selectingArea.top, x: selectingArea.left },\n selectingTo: { y: selectingArea.bottom, x: selectingArea.right },\n },\n });\n },\n [store.selectingZone, choosing],\n );\n\n const handleOptionMouseDown = useCallback(\n (e: React.MouseEvent<HTMLLIElement>, index: number) => {\n selectValue(index);\n e.preventDefault();\n e.stopPropagation();\n return false;\n },\n [selectValue],\n );\n\n return (\n <Fixed\n className={`gs-editor ${editing ? 'gs-editing' : ''}`}\n style={editing ? { top, left, height } : {}}\n {...{\n 'data-mode': mode,\n 'data-sheet-id': sheetId,\n }}\n >\n <div className={`gs-cell-label ${editing ? ' gs-hidden' : ''}`}>{address}</div>\n <div className=\"gs-editor-inner\" style={{ width }}>\n <pre\n className=\"gs-editor-hl\"\n style={{\n //...cell?.style,\n height: editorRef.current?.scrollHeight,\n width: (editorRef.current?.scrollWidth ?? 0) - 4,\n }}\n >\n {cell?.disableFormula ? inputting : editorStyle(inputting)}\n </pre>\n <textarea\n data-sheet-id={sheetId}\n name=\"gs-editor-input\"\n data-size=\"small\"\n autoFocus={true}\n spellCheck={false}\n draggable={false}\n ref={editorRef}\n rows={numLines}\n onFocus={handleFocus}\n style={{ minWidth: width, minHeight: height }}\n onDoubleClick={handleDoubleClick}\n onBlur={handleBlur}\n value={inputting}\n onChange={handleChange}\n onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUpInternal}\n />\n </div>\n <ul className=\"gs-editor-options\" style={{ marginTop: editorRef.current?.scrollHeight }}>\n {filteredOptions.map((option, i) => (\n <li\n key={i}\n className={`gs-editor-option ${selected === i ? ' gs-editor-option-selected' : ''}`}\n onMouseDown={(e) => handleOptionMouseDown(e, i)}\n >\n {option.label ?? option.value}\n </li>\n ))}\n </ul>\n </Fixed>\n );\n};\n\n// Memoized token span component to prevent unnecessary re-renders\nconst TokenSpan = memo<{\n token: any;\n tokenKey: string;\n color?: string;\n className?: string;\n}>(\n ({ token, tokenKey, color, className }) => {\n return (\n <span key={tokenKey} style={color ? { color } : undefined} className={className}>\n {token.stringify()}\n </span>\n );\n },\n (prevProps, nextProps) => {\n // Custom comparison to prevent unnecessary re-renders\n return (\n prevProps.tokenKey === nextProps.tokenKey &&\n prevProps.color === nextProps.color &&\n prevProps.className === nextProps.className &&\n prevProps.token.stringify() === nextProps.token.stringify()\n );\n },\n);\n\nexport const editorStyle = (text: string) => {\n if (text[0] !== '=') {\n return <>{text}</>;\n }\n\n const lexer = new Lexer(text.substring(1));\n lexer.tokenize();\n let palletIndex = 0;\n const exists: { [ref: string]: number } = {};\n\n // Create a simple hash of the formula for stable keys\n const formulaHash = text.split('').reduce((hash, char) => {\n return ((hash << 5) - hash + char.charCodeAt(0)) & 0xffffffff;\n }, 0);\n\n return (\n <>\n =\n {lexer.tokens.map((token, i) => {\n // Handle SPACE tokens differently - render as plain text\n if (token.type === 'SPACE') {\n return <React.Fragment key={`${formulaHash}-SPACE-${i}`}>{token.stringify()}</React.Fragment>;\n }\n\n // Create a stable key based on formula hash, token content and index\n const tokenKey = `${formulaHash}-${token.type}-${token.stringify()}-${i}`;\n\n if (token.type === 'REF' || token.type === 'RANGE') {\n const normalizedToken = token.stringify();\n const existsIndex = exists[normalizedToken];\n if (existsIndex !== undefined) {\n return (\n <TokenSpan\n key={tokenKey}\n token={token}\n tokenKey={tokenKey}\n color={COLOR_PALETTE[existsIndex % COLOR_PALETTE.length]}\n />\n );\n }\n const color = COLOR_PALETTE[palletIndex % COLOR_PALETTE.length];\n exists[normalizedToken] = palletIndex++;\n return (\n <TokenSpan\n key={tokenKey}\n token={token}\n tokenKey={tokenKey}\n color={color}\n className={`gs-token-type-${token.type}`}\n />\n );\n }\n\n return (\n <TokenSpan\n key={tokenKey}\n token={token}\n tokenKey={tokenKey}\n className={`gs-token-type-${token.type} gs-token-entity-type-${typeof token.entity}`}\n />\n );\n })}\n </>\n );\n};\n","import type { ReactNode } from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport type { StoreType } from '../types';\nimport type { Dispatcher } from '../store';\n\nexport type PluginContextType = {\n provided: boolean;\n store?: StoreType;\n sync?: Dispatcher;\n setStore: (store: StoreType) => void;\n setSync: (sync: Dispatcher) => void;\n};\n\nexport const PluginContext = createContext({} as PluginContextType);\n\nexport function useInitialPluginContext(): PluginContextType {\n const [store, setStore] = useState<StoreType | undefined>(undefined);\n const [sync, setSync] = useState<Dispatcher>();\n return {\n provided: true,\n store,\n sync,\n setStore,\n setSync,\n };\n}\n\nexport function usePluginContext(): [boolean, PluginContextType] {\n const ctx = useContext(PluginContext);\n if (ctx?.provided == null) {\n return [false, ctx];\n }\n return [true, ctx];\n}\n\nexport function usePluginDispatch() {\n const sync = useContext(PluginContext);\n if (!sync) {\n return undefined;\n }\n return sync;\n}\n\ntype Props = {\n children: ReactNode;\n context: PluginContextType;\n};\n\nexport function PluginBase({ children, context }: Props) {\n const [provided] = usePluginContext();\n if (provided) {\n return <>{children}</>;\n }\n return <PluginContext.Provider value={context}>{children}</PluginContext.Provider>;\n}\n","import type { FC, MutableRefObject } from 'react';\nimport { createRef, useContext, useEffect, useRef, useState } from 'react';\n\nimport type { OptionsType, Props, Connector } from '../types';\nimport { Context } from '../store';\n\nimport { setStore, updateTable } from '../store/actions';\n\nimport { usePluginContext } from './PluginBase';\nimport { Table } from '../lib/table';\n\ntype StoreObserverProps = OptionsType & {\n sheetName?: string;\n connector?: MutableRefObject<Connector | null>;\n};\n\nexport const createConnector = () => createRef<Connector | null>();\nexport const useConnector = () => useRef<Connector | null>(null);\nexport const StoreObserver: FC<StoreObserverProps> = ({\n sheetName,\n sheetHeight,\n sheetWidth,\n connector,\n editingOnEnter,\n showAddress,\n mode,\n}) => {\n const { store, dispatch } = useContext(Context);\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n\n useEffect(() => {\n if (!table) {\n return;\n }\n if (sheetName && sheetName !== table.sheetName) {\n table.sheetName = sheetName;\n table.wire.sheetIdsByName[sheetName] = table.sheetId;\n delete table.wire.sheetIdsByName[table.prevSheetName];\n table.prevSheetName = sheetName;\n //hub.transmit();\n }\n }, [sheetName]);\n\n useEffect(() => {\n if (!table) {\n return;\n }\n const { wire } = table;\n requestAnimationFrame(() => wire.identifyFormula());\n wire.contextsBySheetId[table.sheetId] = { store, dispatch };\n wire.transmit();\n\n if (connector) {\n connector.current = {\n tableManager: {\n table,\n sync: (table) => {\n dispatch(updateTable(table as Table));\n },\n },\n storeManager: {\n store,\n sync: (store) => {\n dispatch(setStore(store));\n },\n dispatch,\n },\n };\n }\n }, [store, table, connector]);\n\n useEffect(() => {\n if (sheetHeight) {\n dispatch(setStore({ sheetHeight }));\n }\n }, [sheetHeight, dispatch]);\n useEffect(() => {\n if (sheetWidth) {\n dispatch(setStore({ sheetWidth }));\n }\n }, [sheetWidth]);\n useEffect(() => {\n if (typeof editingOnEnter !== 'undefined') {\n dispatch(setStore({ editingOnEnter }));\n }\n }, [editingOnEnter]);\n useEffect(() => {\n if (typeof showAddress !== 'undefined') {\n dispatch(setStore({ showAddress }));\n }\n }, [showAddress]);\n\n useEffect(() => {\n if (mode) {\n dispatch(setStore({ mode }));\n }\n }, [mode]);\n\n const [pluginProvided, pluginContext] = usePluginContext();\n useEffect(() => {\n if (!pluginProvided) {\n return;\n }\n pluginContext.setStore(store);\n pluginContext.setSync(() => dispatch);\n }, [store, pluginProvided, pluginContext]);\n\n return <></>;\n};\n","import { useContext } from 'react';\nimport type { MouseEvent } from 'react';\n\nimport { Context } from '../store';\nimport { setResizingPositionY, setResizingPositionX, updateTable, setStore } from '../store/actions';\n\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, MIN_WIDTH, MIN_HEIGHT } from '../constants';\nimport { zoneToArea, makeSequence, between } from '../lib/structs';\nimport type { CellsByAddressType } from '../types';\nimport { p2a } from '../lib/converters';\n\nexport const Resizer = () => {\n const { store, dispatch } = useContext(Context);\n const {\n resizingPositionY: posY,\n resizingPositionX: posX,\n tableReactive: tableRef,\n leftHeaderSelecting,\n topHeaderSelecting,\n selectingZone,\n editorRef,\n mainRef,\n } = store;\n const table = tableRef.current;\n\n const [y, startY, endY] = posY;\n const [x, startX, endX] = posX;\n\n if (mainRef.current == null || editorRef.current == null || !table) {\n return <div className=\"gs-resizing gs-hidden\" />;\n }\n\n const cell = table.getCellByPoint({ y: y === -1 ? 0 : y, x: x === -1 ? 0 : x }, 'SYSTEM');\n const { y: offsetY, x: offsetX } = mainRef.current.getBoundingClientRect();\n\n const baseWidth = cell?.width || DEFAULT_WIDTH;\n const baseHeight = cell?.height || DEFAULT_HEIGHT;\n\n const width = baseWidth + (endX - startX);\n const height = baseHeight + (endY - startY);\n\n const handleResizeEnd = () => {\n const selectingArea = zoneToArea(selectingZone);\n const { top, left, bottom, right } = selectingArea;\n const diff: CellsByAddressType = {};\n if (x !== -1) {\n let xs = [x];\n if (topHeaderSelecting && between({ start: left, end: right }, x)) {\n xs = makeSequence(left, right + 1);\n }\n xs.forEach((x) => {\n diff[p2a({ y: 0, x })] = { width };\n });\n }\n if (y !== -1) {\n let ys = [y];\n if (leftHeaderSelecting && between({ start: top, end: bottom }, y)) {\n ys = makeSequence(top, bottom + 1);\n }\n ys.forEach((y) => {\n diff[p2a({ y, x: 0 })] = { height };\n });\n }\n table.update({\n diff,\n partial: true,\n operator: 'USER',\n undoReflection: { selectingZone, sheetId: table.sheetId },\n });\n dispatch(\n setStore({\n tableReactive: { current: table },\n ...table.getTotalSize(),\n }),\n );\n dispatch(setResizingPositionY([-1, -1, -1]));\n dispatch(setResizingPositionX([-1, -1, -1]));\n editorRef.current!.focus();\n };\n const handleResizeMove = (e: MouseEvent) => {\n if (y !== -1) {\n let endY = e.clientY;\n const height = baseHeight + (endY - startY);\n if (height < MIN_HEIGHT) {\n endY += MIN_HEIGHT - height;\n }\n dispatch(setResizingPositionY([y, startY, endY]));\n } else if (x !== -1) {\n let endX = e.clientX;\n const width = baseWidth + (endX - startX);\n if (width < MIN_WIDTH) {\n endX += MIN_WIDTH - width;\n }\n dispatch(setResizingPositionX([x, startX, endX]));\n }\n };\n\n return (\n <div\n className={`gs-resizing ${y === -1 && x === -1 ? 'gs-hidden' : ''}`}\n onMouseUp={handleResizeEnd}\n onMouseMove={handleResizeMove}\n >\n <div className={`gs-line-vertical ${x === -1 ? 'gs-hidden' : ''}`}>\n <div className={'gs-line'} style={{ width: 1, height: '100%', left: endX - offsetX }}>\n <span style={{ left: '-50%' }}>{width}px</span>\n </div>\n </div>\n <div className={`gs-line-horizontal ${y === -1 ? 'gs-hidden' : ''}`}>\n <div className={'gs-line'} style={{ width: '100%', height: 1, top: endY - offsetY }}>\n <span style={{ top: '-50%' }}>{height}px</span>\n </div>\n </div>\n </div>\n );\n};\n","import type { FC } from 'react';\nimport { useContext, useEffect, useRef } from 'react';\nimport { Context } from '../store';\n\nexport const Emitter: FC = () => {\n const { store } = useContext(Context);\n const { choosing: pointing, selectingZone: zone, tableReactive } = store;\n const table = tableReactive.current;\n\n useEffect(() => {\n if (table?.isInitialized && table.wire.onChange) {\n table.wire.onChange({\n table,\n points: {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n },\n });\n }\n }, [tableReactive]);\n\n useEffect(() => {\n if (table && table.wire.onSelect) {\n table.wire.onSelect({\n table,\n points: {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n },\n });\n }\n }, [pointing, zone]);\n return null;\n};\n","import type { ContextMenuProps, RawCellType } from '../types';\nimport { areaToZone, zoneShape, zoneToArea } from '../lib/structs';\nimport {\n copy,\n cut,\n paste,\n undo,\n redo,\n insertRowsAbove,\n insertRowsBelow,\n insertColsLeft,\n insertColsRight,\n removeRows,\n removeCols,\n} from './actions';\nimport { clip } from '../lib/clipboard';\nimport { parseHTML, parseText } from '../lib/paste';\n\nexport const copier = async ({ store, dispatch }: ContextMenuProps) => {\n const { editorRef } = store;\n const area = clip(store);\n dispatch(copy(areaToZone(area)));\n editorRef.current?.focus();\n};\n\nexport const cutter = async ({ store, dispatch }: ContextMenuProps) => {\n const { editorRef } = store;\n const area = clip(store);\n dispatch(cut(areaToZone(area)));\n editorRef.current?.focus();\n};\n\nexport const paster = async ({ store, dispatch }: ContextMenuProps, onlyValue = false) => {\n const { editorRef } = store;\n const items = await navigator.clipboard.read();\n let cells: RawCellType[][] = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item.types.indexOf('text/html') !== -1) {\n const blob = await item.getType('text/html');\n const html = await blob.text();\n if (html) {\n cells = parseHTML(html, onlyValue);\n break;\n }\n } else if (item.types.indexOf('text/plain') !== -1) {\n const blob = await item.getType('text/plain');\n const text = await blob.text();\n if (text) {\n cells = parseText(text);\n break;\n }\n }\n }\n dispatch(paste({ matrix: cells, onlyValue }));\n editorRef.current?.focus();\n};\n\nexport const undoer = async ({ store, dispatch }: ContextMenuProps) => {\n const { editorRef } = store;\n dispatch(undo(null));\n editorRef.current?.focus();\n};\n\nexport const redoer = async ({ store, dispatch }: ContextMenuProps) => {\n const { editorRef } = store;\n dispatch(redo(null));\n editorRef.current?.focus();\n};\n\nexport const rowsInserterAbove = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { top } = zoneToArea(selectingZone);\n const numRows = zoneShape({ ...selectingZone, base: 1 }).height;\n dispatch(insertRowsAbove({ numRows, y: top, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const rowsInserterBelow = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { bottom } = zoneToArea(selectingZone);\n const numRows = zoneShape({ ...selectingZone, base: 1 }).height;\n dispatch(insertRowsBelow({ numRows, y: bottom, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const colsInserterLeft = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { left } = zoneToArea(selectingZone);\n const numCols = zoneShape({ ...selectingZone, base: 1 }).width;\n dispatch(insertColsLeft({ numCols, x: left, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const colsInserterRight = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { right } = zoneToArea(selectingZone);\n const numCols = zoneShape({ ...selectingZone, base: 1 }).width;\n dispatch(insertColsRight({ numCols, x: right, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const rowsRemover = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { top } = zoneToArea(selectingZone);\n const numRows = zoneShape({ ...selectingZone, base: 1 }).height;\n dispatch(removeRows({ numRows, y: top, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const colsRemover = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { left } = zoneToArea(selectingZone);\n const numCols = zoneShape({ ...selectingZone, base: 1 }).width;\n dispatch(removeCols({ numCols, x: left, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const syncers = {\n copy: copier,\n cut: cutter,\n paste: paster,\n undo: undoer,\n redo: redoer,\n insertRowsAbove: rowsInserterAbove,\n insertRowsBelow: rowsInserterBelow,\n insertColsLeft: colsInserterLeft,\n insertColsRight: colsInserterRight,\n removeRows: rowsRemover,\n removeCols: colsRemover,\n};\n","import { type FC, useContext, useRef } from 'react';\n\nimport { setContextMenuPosition } from '../store/actions';\nimport { zoneShape } from '../lib/structs';\n\nimport { Context } from '../store';\nimport * as prevention from '../lib/operation';\nimport { Fixed } from './Fixed';\nimport {\n colsInserterLeft,\n colsInserterRight,\n colsRemover,\n copier,\n cutter,\n paster,\n redoer,\n rowsInserterAbove,\n rowsInserterBelow,\n rowsRemover,\n undoer,\n} from '../store/dispatchers';\nimport type { ContextMenuProps } from '../types';\n\nexport const ContextMenu = () => {\n const { store, dispatch } = useContext(Context);\n const { contextMenuPosition, contextMenuItems } = store;\n const { y: top, x: left } = contextMenuPosition;\n if (top === -1) {\n return null;\n }\n return (\n <Fixed\n className=\"gs-contextmenu-modal\"\n onClick={(e: MouseEvent) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n return false;\n }}\n >\n <div className={'gs-contextmenu'} style={{ top: top, left: left }}>\n <ul>\n {contextMenuItems.map((Item, index) => {\n return <Item key={index} store={store} dispatch={dispatch} />;\n })}\n </ul>\n </div>\n </Fixed>\n );\n};\n\nexport const DividerItem = (props: ContextMenuProps) => {\n return <li className=\"gs-menu-divider\" />;\n};\n\nexport const CutItem = (props: ContextMenuProps) => {\n return (\n <li className=\"gs-enabled\" data-testid=\"cut-item\" onClick={async () => await cutter(props)}>\n <div className=\"gs-menu-name\">Cut</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">X</span>\n </div>\n </li>\n );\n};\n\nexport const CopyItem = (props: ContextMenuProps) => {\n return (\n <li className=\"gs-enabled\" data-testid=\"copy-item\" onClick={async () => await copier(props)}>\n <div className=\"gs-menu-name\">Copy</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">C</span>\n </div>\n </li>\n );\n};\n\nexport const PasteItem = (props: ContextMenuProps) => {\n return (\n <li className=\"gs-enabled\" data-testid=\"paste-item\" onClick={async () => await paster(props, false)}>\n <div className=\"gs-menu-name\">Paste</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">V</span>\n </div>\n </li>\n );\n};\n\nexport const PasteOnlyValueItem = (props: ContextMenuProps) => {\n return (\n <li className=\"gs-enabled\" data-testid=\"paste-only-value-item\" onClick={async () => await paster(props, true)}>\n <div className=\"gs-menu-name\">Paste only value</div>\n <div className=\"gs-menu-shortcut\">\n Shift + <span className=\"gs-menu-underline\">V</span>\n </div>\n </li>\n );\n};\n\nexport const RowsColsOperationDividerItem = (props: ContextMenuProps) => {\n const { leftHeaderSelecting, topHeaderSelecting } = props.store;\n if (leftHeaderSelecting || topHeaderSelecting) {\n return <li className=\"gs-menu-divider\" />;\n }\n return null;\n};\n\nexport const InsertRowsAboveItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, leftHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!leftHeaderSelecting || !table) {\n return null;\n }\n const { y } = choosing;\n const { height } = zoneShape({ ...selectingZone, base: 1 });\n const selectingTopCell = table.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const disabled =\n (table.maxNumRows !== -1 && table.getNumRows() + height > table.maxNumRows) ||\n prevention.hasOperation(selectingTopCell?.prevention, prevention.InsertRowsAbove);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"insert-rows-above-item\"\n onClick={async (e) => {\n if (!disabled) {\n await rowsInserterAbove(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {height} row{height > 1 && 's'} above\n </div>\n </li>\n );\n};\n\nexport const InsertRowsBelowItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, leftHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!leftHeaderSelecting || !table) {\n return null;\n }\n const { y } = choosing;\n const { height } = zoneShape({ ...selectingZone, base: 1 });\n const selectingBottomCell = table.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const disabled =\n (table.maxNumRows !== -1 && table.getNumRows() + height > table.maxNumRows) ||\n prevention.hasOperation(selectingBottomCell?.prevention, prevention.InsertRowsBelow);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"insert-rows-below-item\"\n onClick={async (e) => {\n if (!disabled) {\n await rowsInserterBelow(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {height} row{height > 1 && 's'} below\n </div>\n </li>\n );\n};\n\nexport const InsertColsLeftItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, topHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!topHeaderSelecting || !table) {\n return null;\n }\n const { x } = choosing;\n const { width } = zoneShape({ ...selectingZone, base: 1 });\n const selectingLeftCell = table.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const disabled =\n (table.maxNumCols !== -1 && table.getNumCols() + width > table.maxNumCols) ||\n prevention.hasOperation(selectingLeftCell?.prevention, prevention.InsertColsLeft);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"insert-cols-left-item\"\n onClick={async (e) => {\n if (!disabled) {\n await colsInserterLeft(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {width} column{width > 1 && 's'} left\n </div>\n </li>\n );\n};\n\nexport const InsertColsRightItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, topHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!topHeaderSelecting || !table) {\n return null;\n }\n const { x } = choosing;\n const { width } = zoneShape({ ...selectingZone, base: 1 });\n const selectingRightCell = table.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const disabled =\n (table.maxNumCols !== -1 && table.getNumCols() + width > table.maxNumCols) ||\n prevention.hasOperation(selectingRightCell?.prevention, prevention.InsertColsRight);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"insert-cols-right-item\"\n onClick={async (e) => {\n if (!disabled) {\n await colsInserterRight(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {width} column{width > 1 && 's'} right\n </div>\n </li>\n );\n};\n\nexport const RemoveRowsItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, leftHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!leftHeaderSelecting || !table) {\n return null;\n }\n const { y } = choosing;\n const { height } = zoneShape({ ...selectingZone, base: 1 });\n const selectingTopCell = table.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const disabled =\n (table.minNumRows !== -1 && table.getNumRows() - height < table.minNumRows) ||\n prevention.hasOperation(selectingTopCell?.prevention, prevention.RemoveRows);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"remove-rows-item\"\n onClick={async (e) => {\n if (!disabled) {\n await rowsRemover(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Remove {height} row{height > 1 && 's'}\n </div>\n </li>\n );\n};\n\nexport const RemoveColsItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, topHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!topHeaderSelecting || !table) {\n return null;\n }\n const { x } = choosing;\n const { width } = zoneShape({ ...selectingZone, base: 1 });\n const selectingRightCell = table.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const disabled =\n (table.minNumCols !== -1 && table.getNumCols() - width < table.minNumCols) ||\n prevention.hasOperation(selectingRightCell?.prevention, prevention.RemoveCols);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"remove-cols-item\"\n onClick={async (e) => {\n if (!disabled) {\n await colsRemover(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Remove {width} column{width > 1 && 's'}\n </div>\n </li>\n );\n};\n\nexport const HistoryDeviderItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef } = props.store;\n const table = tableRef.current;\n\n if (!table) {\n return null;\n }\n\n const historyIndex = table.getHistoryIndex();\n if (historyIndex > -1 || historyIndex < table.getHistorySize() - 1) {\n return <li className=\"gs-menu-divider\" />;\n }\n return null;\n};\n\nexport const UndoItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef } = props.store;\n const table = tableRef.current;\n\n if (!table) {\n return null;\n }\n\n const historyIndex = table.getHistoryIndex();\n if (historyIndex <= -1) {\n return null;\n }\n return (\n <li className=\"gs-enabled\" data-testid=\"undo-item\" onClick={async () => undoer(props)}>\n <div className=\"gs-menu-name\">Undo</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">Z</span>\n </div>\n </li>\n );\n};\n\nexport const RedoItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef } = props.store;\n const table = tableRef.current;\n\n if (!table) {\n return null;\n }\n\n const historyIndex = table.getHistoryIndex();\n if (historyIndex >= table.getHistorySize() - 1) {\n return null;\n }\n return (\n <li className=\"gs-enabled\" data-testid=\"redo-item\" onClick={async () => redoer(props)}>\n <div className=\"gs-menu-name\">Redo</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">R</span>\n </div>\n </li>\n );\n};\n\nexport const defaultContextMenuItems: FC<ContextMenuProps>[] = [\n CutItem,\n CopyItem,\n PasteItem,\n PasteOnlyValueItem,\n\n RowsColsOperationDividerItem,\n\n InsertRowsAboveItem,\n InsertRowsBelowItem,\n InsertColsLeftItem,\n InsertColsRightItem,\n RemoveRowsItem,\n RemoveColsItem,\n\n HistoryDeviderItem,\n\n UndoItem,\n RedoItem,\n];\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",o=t+\"|\"+i,r=e[o];return r||(r=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+\"-\"+r[1]+\"-\"+r[2]+\" \"+l+\":\"+r[4]+\":\"+r[5]+\":000\",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n,i=this.utcOffset(),a=this.toDate(),u=a.toLocaleString(\"en-US\",{timeZone:t}),f=Math.round((a-new Date(u))/1e3/60),s=15*-Math.round(a.getTimezoneOffset()/15)-f;if(!Number(s))n=this.utcOffset(0,e);else if(n=o(u,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,\"minute\")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if(\"string\"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));","import { CellType } from '../types';\nimport { TimeDelta } from '../lib/time';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc.js';\nimport timezone from 'dayjs/plugin/timezone.js';\ndayjs.extend(timezone);\ndayjs.extend(utc);\n\ntype Condition = (value: string) => boolean;\ntype Stringify = (value: string) => any;\n\ntype Props = {\n condition?: Condition;\n complement?: Stringify;\n mixins?: ParserMixinType[];\n};\n\nconst BOOLS = { true: true, false: false } as { [s: string]: boolean };\nconst NUMS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);\nconst NUMS_Z = new Set([...NUMS, 'Z', 'z']);\nconst JFMASOND = new Set(['J', 'F', 'M', 'A', 'S', 'O', 'N', 'D', ...NUMS]);\nconst NBRYNLGPTVC = new Set(['N', 'B', 'R', 'Y', 'N', 'L', 'G', 'P', 'T', 'V', 'C', ...NUMS_Z]);\n\nexport interface ParserMixinType {\n functions?: ((value: string, cell?: CellType) => any)[];\n callback?(parsed: any, cell?: CellType): CellType;\n parse?(value: string, cell: CellType): any;\n any?(value: string, cell?: CellType): string | undefined;\n bool?(value: string, cell?: CellType): boolean | undefined;\n number?(value: string, cell?: CellType): number | undefined;\n timedelta?(value: string, cell?: CellType): TimeDelta | undefined;\n date?(value: string, cell?: CellType): Date | undefined;\n}\n\nexport class Parser implements ParserMixinType {\n functions!: ((value: string, cell?: CellType) => any)[];\n private condition?: Condition;\n private complement?: Stringify;\n\n constructor(props?: Props) {\n this.applyMixins(props?.mixins);\n\n if (!this.functions) {\n this.functions = [\n this.number.bind(this),\n this.timedelta.bind(this),\n this.date.bind(this),\n this.bool.bind(this),\n this.any.bind(this),\n ];\n }\n\n if (props != null) {\n const { condition, complement } = props;\n this.condition = condition;\n this.complement = complement;\n }\n }\n\n private applyMixins(mixins?: ParserMixinType[]) {\n if (!mixins) {\n return;\n }\n\n for (const mixin of mixins) {\n for (const key in mixin) {\n if (key === 'functions' && Array.isArray(mixin.functions)) {\n if (!this.functions) {\n this.functions = [];\n }\n this.functions.push(...mixin.functions);\n } else {\n (this as any)[key] = (mixin as any)[key];\n }\n }\n }\n }\n\n public call(value: string, cell: CellType): CellType {\n try {\n const parsed = this.parse(value, cell);\n return this.callback(parsed, cell);\n } catch (e) {\n return this.callback(String(e), cell);\n }\n }\n\n public callback(parsed: any, cell?: CellType): CellType {\n return { ...cell, value: parsed };\n }\n\n public parse(value: string, cell?: CellType): any {\n if (this.condition && !this.condition(value)) {\n const result = this.complement ? this.complement(value) : value;\n return result;\n }\n if (value[0] === \"'\") {\n return value;\n }\n for (let i = 0; i < this.functions.length; i++) {\n const result = this.functions[i](value, cell);\n if (result != null) {\n return result;\n }\n }\n if (value === '') {\n return null;\n }\n return value;\n }\n\n any(value: string, cell?: CellType): string | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n return value;\n }\n\n bool(value: string, cell?: CellType): boolean | undefined {\n return BOOLS[value.toLowerCase()];\n }\n\n number(value: string, cell?: CellType): number | undefined {\n const m = value.match(/^-?[\\d.]+$/);\n if (m != null && value.match(/\\.$/) == null && (value.match(/\\./g) || []).length <= 1) {\n return parseFloat(value);\n }\n }\n\n timedelta(value: string, cell?: CellType): TimeDelta | undefined {\n if (value.length < 4 || isNaN(value[value.length - 1] as unknown as number)) {\n return;\n }\n return TimeDelta.parse(value);\n }\n\n date(value: string, cell?: CellType): Date | undefined {\n const first = value[0];\n if (first == null || !JFMASOND.has(first.toUpperCase())) {\n return;\n }\n if (!NBRYNLGPTVC.has(value[value.length - 1].toUpperCase())) {\n return;\n }\n if (value.match(/[=*&#@!?[\\]{}\"'()|%\\\\<>~+\\r\\n]/)) {\n return;\n }\n let timeZone = 'UTC';\n try {\n timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (e) {}\n try {\n const day = dayjs.tz(value, timeZone);\n return day.toDate();\n } catch (e) {}\n }\n}\n\nexport type ParserType = Parser;\n\nexport const defaultParser = new Parser();\n","import { Special } from '../constants';\nimport { Table } from '../lib/table';\nimport { Id, MatrixType, PointType, RefEvaluation } from '../types';\nimport { FormulaError, Lexer, Parser } from './evaluator';\n\nconst SOLVING = new Special('solving');\n\ntype SolveFormulaProps = {\n value: any;\n table: Table;\n raise?: boolean;\n refEvaluation?: RefEvaluation;\n origin: PointType;\n};\n\nexport const solveFormula = ({ value, table, raise = true, refEvaluation = 'TABLE', origin }: SolveFormulaProps) => {\n if (refEvaluation === 'SYSTEM') {\n return value;\n }\n let solved = value;\n\n if (typeof value === 'string') {\n if (value.charAt(0) === '=') {\n try {\n const lexer = new Lexer(value.substring(1), { origin });\n lexer.tokenize();\n const parser = new Parser(lexer.tokens);\n if (refEvaluation === 'RAW') {\n return '=' + lexer.display({ table });\n }\n const expr = parser.build();\n solved = expr?.evaluate?.({ table });\n } catch (e) {\n table.setSolvedCache(origin, e);\n if (raise) {\n throw e;\n }\n return undefined;\n }\n }\n }\n if (refEvaluation === 'COMPLETE' && solved instanceof Table) {\n solved = solveTable({ table: solved, raise })[0][0];\n } else {\n table.setSolvedCache(origin, solved);\n }\n return solved;\n};\n\ntype SolveTableProps = {\n table: Table;\n raise?: boolean;\n refEvaluation?: RefEvaluation;\n};\n\nexport const solveTable = ({ table, raise = true }: SolveTableProps): MatrixType => {\n const area = table.getArea();\n return table.getFieldMatrix({ area, refEvaluation: 'SYSTEM', field: 'value' }).map((row, i) => {\n const y = area.top + i;\n return row.map((value, j) => {\n const x = area.left + j;\n const point = { y, x };\n const cache = table.getSolvedCache(point);\n\n try {\n if (cache === SOLVING) {\n throw new FormulaError('#REF!', 'References are circulating.', new Error(value as string));\n } else if (cache instanceof FormulaError) {\n throw cache;\n } else if (cache != null) {\n return cache;\n }\n table.setSolvedCache(point, SOLVING);\n const solved = solveFormula({ value, table, raise, origin: point, refEvaluation: 'COMPLETE' });\n table.setSolvedCache(point, solved);\n return solved;\n } catch (e) {\n table.setSolvedCache(point, e);\n if (raise) {\n throw e;\n }\n return e;\n }\n });\n });\n};\n\nexport type StripTableProps = {\n value: any;\n y?: number;\n x?: number;\n raise?: boolean;\n history?: Set<Id>;\n};\n\nexport const stripTable = ({ value, y = 0, x = 0, raise = true, history = new Set() }: StripTableProps): any => {\n if (value instanceof Table) {\n const id = value.getId({ x, y });\n if (history.has(id)) {\n const e = new FormulaError('#REF!', 'References are circulating.');\n if (raise) {\n throw e;\n }\n return e;\n }\n history.add(id);\n value = solveTable({ table: value, raise })[y][x];\n if (value instanceof Table) {\n return stripTable({ value, y, x, raise, history });\n }\n }\n return value;\n};\n","import dayjs from 'dayjs';\n\nimport { CellType, PointType, WriterType } from '../types';\nimport { Table, UserTable } from '../lib/table';\nimport { solveFormula, solveTable } from '../formula/solver';\nimport { FormulaError } from '../formula/evaluator';\nimport { TimeDelta } from '../lib/time';\nimport { stripTable } from '../formula/solver';\n\ntype Condition = (value: any) => boolean;\n\ntype Stringify = (value: any) => string;\n\nexport type Props = {\n condition?: Condition;\n complement?: Stringify;\n mixins?: RendererMixinType[];\n};\n\nexport type RendererCallProps = {\n table: Table;\n point: PointType;\n sync?: (table: UserTable) => void;\n};\n\nexport type RenderProps<T extends any = any> = {\n value: T;\n cell?: CellType<T>;\n table: Table;\n point: PointType;\n sync?: (table: UserTable) => void;\n};\n\nexport interface RendererMixinType {\n datetimeFormat?: string;\n dateFormat?: string;\n timeDeltaFormat?: string;\n\n decorate?(rendered: any, props: RenderProps): any;\n render?(props: RenderProps): any;\n stringify?(props: RenderProps): string;\n string?(props: RenderProps<string>): any;\n table?(props: RenderProps<Table>): any;\n bool?(props: RenderProps<boolean>): any;\n number?(props: RenderProps<number>): any;\n date?(props: RenderProps<Date>): any;\n timedelta?(props: RenderProps<TimeDelta>): any;\n array?(props: RenderProps<any[]>): any;\n object?(props: RenderProps<any>): any;\n null?(props: RenderProps<null | undefined>): any;\n}\n\nexport class Renderer implements RendererMixinType {\n public datetimeFormat: string = 'YYYY-MM-DD HH:mm:ss';\n public dateFormat: string = 'YYYY-MM-DD';\n public timeDeltaFormat: string = 'HH:mm:ss';\n private condition?: Condition;\n private complement?: Stringify;\n\n constructor(props?: Props) {\n this.applyMixins(props?.mixins);\n if (props == null) {\n return;\n }\n const { condition, complement } = props;\n this.condition = condition;\n this.complement = complement;\n }\n\n private applyMixins(mixins?: RendererMixinType[]) {\n if (mixins == null) {\n return;\n }\n for (const mixin of mixins) {\n for (const key in mixin) {\n (this as any)[key] = (mixin as any)[key];\n }\n }\n }\n\n public call(props: RendererCallProps): any {\n const { point: origin, table, sync } = props;\n const key = table.getId(origin);\n const cell = table.getById(key) ?? {};\n const cache = table.getSolvedCache(origin);\n let value = cache;\n if (cache === undefined) {\n if (typeof cell?.value === 'string' && !cell?.disableFormula) {\n if (cell.value[0] === \"'\") {\n value = cell.value.substring(1);\n } else {\n value = solveFormula({ value: cell.value, table, raise: true, origin });\n }\n } else {\n value = cell?.value;\n }\n }\n const rendered = this.render({ value, cell, table, sync, point: origin });\n return this.decorate(rendered, { ...props, value, cell });\n }\n\n public decorate(rendered: any, props: RenderProps): any {\n return rendered;\n }\n\n public render(props: RenderProps): any {\n const { cell, table, point } = props;\n const value = props.value;\n\n if (this.condition && !this.condition(value)) {\n return this.complement ? this.complement(value) : this.stringify(props);\n }\n if (value == null) {\n return this.null(props);\n }\n\n switch (typeof value) {\n case 'object':\n if (value instanceof Table) {\n return this.table(props);\n }\n if (value instanceof Date) {\n return this.date(props);\n }\n if (TimeDelta.is(value)) {\n return this.timedelta({ value: TimeDelta.ensure(value), cell, table, point });\n }\n if (Array.isArray(value)) {\n return this.array(props);\n }\n if (value instanceof FormulaError) {\n throw value;\n }\n return this.object(props);\n case 'string':\n return this.string(props);\n case 'number':\n return this.number(props);\n case 'boolean':\n return this.bool(props);\n case 'function':\n return value() as string;\n }\n return '';\n }\n\n stringify({ value, cell, table, point }: RenderProps): string {\n if (value === undefined) {\n value = cell?.value;\n }\n if (value instanceof Date) {\n return this.date({ value, cell, table, point });\n }\n if (TimeDelta.is(value)) {\n const ensured = TimeDelta.ensure(value);\n return this.timedelta({ value: ensured, cell: { ...cell, value: ensured }, table, point });\n }\n if (value == null) {\n return '';\n }\n if (value instanceof FormulaError) {\n return '';\n }\n if (value instanceof Error) {\n return '';\n }\n return value.toString();\n }\n\n string({ value }: RenderProps<string>): any {\n return value!;\n }\n\n table(props: RenderProps<Table>): any {\n let { value: table } = props;\n const value = stripTable({ value: table });\n return this.render({ ...props, table, value });\n }\n\n bool({ value }: RenderProps<boolean>): any {\n return value ? 'TRUE' : 'FALSE';\n }\n\n number({ value }: RenderProps<number>): any {\n if (isNaN(value!)) {\n return 'NaN';\n }\n return value;\n }\n\n date({ value }: RenderProps<Date>): any {\n if (value!.getHours() + value!.getMinutes() + value!.getSeconds() === 0) {\n return dayjs(value).format(this.dateFormat);\n }\n return dayjs(value).format(this.datetimeFormat);\n }\n\n timedelta({ value }: RenderProps<TimeDelta>) {\n return value!.stringify(this.timeDeltaFormat);\n }\n\n array(props: RenderProps<any[]>): any {\n let { value } = props;\n return value!.map((v) => this.stringify(props)).join(',');\n }\n\n object({ value }: RenderProps<any>): any {\n return JSON.stringify(value);\n }\n\n null({}: RenderProps<null | undefined>): any {\n return '';\n }\n}\n\nexport type RendererType = Renderer;\nexport const defaultRenderer = new Renderer();\n","import { Table } from '../../lib/table';\nimport type { PointType } from '../../types';\nimport { Expression } from '../evaluator';\n\nexport type FunctionProps = {\n args: Expression[];\n table: Table;\n origin?: PointType;\n};\n\nexport class BaseFunction {\n public example = '_BASE()';\n public helpTexts = [\"Function's description.\"];\n public helpArgs = [{ name: 'value1', description: '' }];\n protected bareArgs: any[];\n protected table: Table;\n protected origin?: PointType;\n\n constructor({ args, table, origin }: FunctionProps) {\n this.bareArgs = args.map((a) => a.evaluate({ table }));\n this.table = table;\n this.origin = origin;\n }\n protected validate() {}\n\n public call() {\n this.validate();\n\n // @ts-expect-error main is not defined in BaseFunction\n\n return this.main(...this.bareArgs);\n }\n}\n\nexport type FunctionMapping = { [functionName: string]: typeof BaseFunction };\n","import { stripTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { FormulaError } from '../evaluator';\nimport dayjs from 'dayjs';\nimport { FULLDATE_FORMAT_UTC } from '../../constants';\n\nexport const gt = (left: any, right: any): boolean => {\n if (typeof left === 'string' || typeof right === 'string') {\n return ensureString(left) > ensureString(right);\n }\n try {\n return ensureNumber(left) > ensureNumber(right);\n } catch {\n return false;\n }\n};\n\nexport const gte = (left: any, right: any): boolean => {\n if (typeof left === 'string' || typeof right === 'string') {\n return ensureString(left) >= ensureString(right);\n }\n try {\n return ensureNumber(left) >= ensureNumber(right);\n } catch {\n return false;\n }\n};\n\nexport const lt = (left: any, right: any): boolean => {\n return !gte(left, right);\n};\n\nexport const lte = (left: any, right: any): boolean => {\n return !gt(left, right);\n};\n\nexport const eq = (left: any, right: any): boolean => {\n return ensureString(left) === ensureString(right);\n};\n\nexport const ne = (left: any, right: any): boolean => {\n return !eq(left, right);\n};\n\nexport type EnsureNumberOptions = {\n alternative?: number;\n ignore?: boolean;\n};\n\nexport type EnsureBooleanOptions = {\n alternative?: boolean;\n ignore?: boolean;\n};\n\nexport const ensureNumber = (value: any, options?: EnsureNumberOptions): number => {\n const { alternative, ignore } = options || {};\n if (typeof value === 'undefined' && typeof alternative !== 'undefined') {\n return alternative;\n }\n if (!value) {\n // falsy is 0\n return 0;\n }\n if (value instanceof Table) {\n const v = stripTable({ value });\n return ensureNumber(v, { alternative });\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const num = parseFloat(value.slice(0, -1));\n if (!isNaN(num)) {\n return num / 100;\n }\n }\n\n const num = parseFloat(value as string);\n if (isNaN(num)) {\n if (ignore) {\n return 0;\n }\n throw new FormulaError('#VALUE!', `${value} cannot be converted to a number`);\n }\n return num;\n};\n\nexport const ensureString = (value: any): string => {\n if (value === 0) {\n return '0';\n }\n if (!value) {\n return '';\n }\n if (value instanceof Table) {\n const v = stripTable({ value });\n return ensureString(v);\n }\n switch (value.constructor.name) {\n case 'Date': {\n const d: Date = value;\n return dayjs(d).format(FULLDATE_FORMAT_UTC);\n }\n default:\n return String(value);\n }\n};\n\nexport const ensureBoolean = (value: any, options?: EnsureBooleanOptions): boolean => {\n const { alternative, ignore } = options ?? {};\n if (typeof value === 'undefined' && typeof alternative !== 'undefined') {\n return alternative;\n }\n if (value === null) {\n return false;\n }\n if (value instanceof Table) {\n const v = stripTable({ value });\n return ensureBoolean(v, options);\n }\n if (typeof value === 'string' || value instanceof String) {\n const bool = { true: true, false: false }[value.toLowerCase()];\n if (bool == null) {\n if (ignore) {\n return false;\n }\n throw new FormulaError('#VALUE!', `text '${value as string}' cannot be converted to a boolean`);\n }\n return bool;\n }\n return Boolean(value);\n};\n\nconst CONDITION_REGEX = /^(<=|>=|<>|>|<|=)?(.*)$/;\n\nexport const check = (value: any, condition: string): boolean => {\n const m = condition.match(CONDITION_REGEX);\n\n const [, expr = '', target = ''] = m || [];\n let comparison: any = target;\n if (expr === '>' || expr === '<' || expr === '>=' || expr === '<=') {\n if (typeof value === 'number') {\n comparison = parseFloat(target);\n }\n switch (expr) {\n case '>':\n return gt(value, comparison);\n case '>=':\n return gte(value, comparison);\n case '<':\n return lt(value, comparison);\n case '<=':\n return lte(value, comparison);\n }\n }\n\n const equals = expr === '' || expr === '=';\n if (target === '') {\n // empty target means \"\" or \"<>\"\n return (value == null || value === '') === equals;\n }\n\n if (typeof value === 'string' || value instanceof String) {\n const replaced = target\n .replace(/~\\*/g, '(\\\\*)')\n .replace(/~\\?/g, '(\\\\?)')\n .replace(/\\*/g, '(.*)')\n .replace(/\\?/g, '(.)');\n const regex = RegExp(`^${replaced}$`, 'i');\n return regex.test(value as string) === equals;\n }\n return eq(value, comparison) === equals;\n};\n","import dayjs from 'dayjs';\n\nimport { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\nimport { Table } from '../../lib/table';\nimport { TimeDelta } from '../../lib/time';\nimport { SECONDS_IN_DAY } from '../../constants';\n\nexport class AddFunction extends BaseFunction {\n example = 'ADD(2, 3)';\n helpText = ['Returns the sum of two numbers.', \"This is the same as the '+' operator.\"];\n helpArgs = [\n { name: 'value1', description: 'First additive.' },\n { name: 'value2', description: 'Second additive.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ADD is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n arg = stripTable({ value: arg });\n }\n return typeof arg === 'object' ? arg : ensureNumber(arg);\n });\n }\n\n protected main(v1: number | Date | TimeDelta, v2: number | Date | TimeDelta) {\n if (typeof v1 === 'number' && typeof v2 === 'number') {\n return v1 + v2;\n }\n if (v1 instanceof Date && TimeDelta.is(v2)) {\n return TimeDelta.ensure(v2).add(v1);\n }\n if (TimeDelta.is(v1) && v2 instanceof Date) {\n return TimeDelta.ensure(v1).add(v2);\n }\n if (v1 instanceof Date && typeof v2 === 'number') {\n return dayjs(v1)\n .add(v2 * SECONDS_IN_DAY, 'second')\n .toDate();\n }\n if (typeof v1 === 'number' && v2 instanceof Date) {\n return dayjs(v2)\n .add(v1 * SECONDS_IN_DAY, 'second')\n .toDate();\n }\n try {\n return ensureNumber(v1, { alternative: 0 }) + ensureNumber(v2, { alternative: 0 });\n } catch (e) {\n throw new FormulaError('#VALUE!', 'Mismatched types for augend or addend.');\n }\n }\n}\n","import dayjs from 'dayjs';\n\nimport { FormulaError } from '../evaluator';\nimport { TimeDelta } from '../../lib/time';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\nimport { Table } from '../../lib/table';\nimport { SECONDS_IN_DAY } from '../../constants';\n\nexport class MinusFunction extends BaseFunction {\n example = 'MINUS(8, 3)';\n helpText = ['Returns the difference of two numbers.', \"This is the same as the '-' operator.\"];\n helpArgs = [\n { name: 'value1', description: 'A number that will be subtracted.' },\n { name: 'value2', description: 'A number that will subtract from value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for MINUS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n arg = stripTable({ value: arg });\n }\n return typeof arg === 'object' ? arg : ensureNumber(arg);\n });\n }\n\n protected main(v1: number | Date | TimeDelta, v2: number | Date | TimeDelta) {\n if (typeof v1 === 'number' && typeof v2 === 'number') {\n return v1 - v2;\n }\n if (v1 instanceof Date && v2 instanceof Date) {\n return new TimeDelta(v1, v2);\n }\n if (v1 instanceof Date && TimeDelta.is(v2)) {\n return TimeDelta.ensure(v2).sub(v1);\n }\n if (TimeDelta.is(v1) && v2 instanceof Date) {\n return TimeDelta.ensure(v1).sub(v2);\n }\n if (v1 instanceof Date && typeof v2 === 'number') {\n return dayjs(v1)\n .subtract(v2 * SECONDS_IN_DAY, 'second')\n .toDate();\n }\n try {\n return ensureNumber(v1, { alternative: 0 }) - ensureNumber(v2, { alternative: 0 });\n } catch (e) {\n throw new FormulaError('#VALUE!', 'Mismatched types for minuend or subtrahend.');\n }\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class MultiplyFunction extends BaseFunction {\n example = 'MULTIPLY(6, 7)';\n helpText = ['Returns the product of two numbers.', \"This is the same as the '*' operator.\"];\n helpArgs = [\n { name: 'factor1', description: 'First factor.' },\n { name: 'factor2', description: 'Second factor.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for MULTIPLY is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(v1: number, v2: number) {\n return v1 * v2;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class DivideFunction extends BaseFunction {\n example = 'DIVIDE(4, 2)';\n helpText = ['Returns the result of dividing one number by another.', \"This is the same as the '/' operator.\"];\n helpArgs = [\n {\n name: 'dividend',\n description: 'A number that will be divided by divisor.',\n },\n { name: 'divisor', description: 'A number that will divide a dividend.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for DIVIDE is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[1] === 0) {\n throw new FormulaError('#DIV/0!', 'The second argument must be non-zero.');\n }\n }\n\n protected main(divided: number, divisor: number) {\n return divided / divisor;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class ModFunction extends BaseFunction {\n example = 'MOD(10, 4)';\n helpText = ['Returns the result of the modulo operation.'];\n helpArgs = [\n {\n name: 'dividend',\n description: 'A number that will be divided by divisor.',\n },\n { name: 'divisor', description: 'A number that will divide a dividend.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for MOD is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[1] === 0) {\n throw new FormulaError('#DIV/0!', 'The second argument must be non-zero.');\n }\n }\n\n protected main(v1: number, v2: number) {\n // https://stackoverflow.com/questions/4467539/javascript-modulo-gives-a-negative-result-for-negative-numbers\n return ((v1 % v2) + v2) % v2;\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\nimport { FormulaError } from '../evaluator';\n\nexport class SumFunction extends BaseFunction {\n example = 'SUM(A2:A100, 101)';\n helpText = ['Returns the sum of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n throw new FormulaError('#N/A', 'One or more arguments are required.');\n }\n const spreaded: number[] = [];\n this.bareArgs.forEach((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .map((v) => ensureNumber(v, { ignore: true })),\n );\n return;\n }\n spreaded.push(ensureNumber(arg, { ignore: true }));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n if (values.length === 0) {\n return 0;\n }\n return values.reduce((a, b) => a + b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class ConcatFunction extends BaseFunction {\n example = 'CONCAT(\"Hello\", \"World\")';\n helpText = ['Returns the concatenation of two values.', \"This is the same as the '&' operator.\"];\n helpArgs = [\n { name: 'value1', description: 'A value to be concatenated with value2.' },\n { name: 'value2', description: 'A value to be concatenated with value1' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for CONCAT is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureString(arg));\n }\n\n protected main(v1: string, v2: string) {\n return v1 + v2;\n }\n}\n","import { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class ConcatenateFunction extends BaseFunction {\n example = 'CONCATENATE(\"Hello\", \"World\")';\n helpText = ['Returns the concatenation of the values.'];\n helpArgs = [\n { name: 'value1', description: 'First string value.' },\n {\n name: 'value2',\n description: 'Additional string values to be concatenated with the value1',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n this.bareArgs = this.bareArgs.map((arg) => ensureString(arg));\n }\n\n protected main(...values: string[]) {\n return values.reduce((a, b) => a + b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { eq } from './__utils';\n\nexport class EqFunction extends BaseFunction {\n example = 'EQ(6, 7)';\n helpText = [\n 'Returns TRUE if the two specified values are equal, FALSE if they are not.',\n \"This is the same as the '=' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for EQ is incorrect.');\n }\n }\n\n protected main(v1: any, v2: any) {\n return eq(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ne } from './__utils';\n\nexport class NeFunction extends BaseFunction {\n example = 'NE(6, 7)';\n helpText = [\n 'Returns TRUE if the two specified values are not equal, FALSE if they are.',\n \"This is the same as the '<>' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for NE is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return ne(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { gt } from './__utils';\n\nexport class GtFunction extends BaseFunction {\n example = 'GT(5, 3)';\n helpText = [\n 'Returns TRUE if the first argument is truly greater than the second, FALSE otherwise.',\n \"This is the same as the '>' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for GT is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return gt(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { gte } from './__utils';\n\nexport class GteFunction extends BaseFunction {\n example = 'GTE(5, 3)';\n helpText = [\n 'Returns TRUE if the first argument is greater than the second, FALSE otherwise.',\n \"This is the same as the '>=' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for GTE is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return gte(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { lt } from './__utils';\n\nexport class LtFunction extends BaseFunction {\n example = 'LT(3, 6)';\n helpText = [\n 'Returns TRUE if the first argument is truely less than the second argument, FALSE otherwise.',\n \"This is the same as the '<' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for LT is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return lt(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { lte } from './__utils';\n\nexport class LteFunction extends BaseFunction {\n example = 'LTE(3, 6)';\n helpText = [\n 'Returns TRUE if the first argument is less than the second argument, FALSE otherwise.',\n \"This is the same as the '<=' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for LTE is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return lte(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class NowFunction extends BaseFunction {\n example = 'NOW()';\n helpText = ['Returns a serial value corresponding to the current date and time.'];\n helpArgs = [];\n\n protected validate() {\n if (this.bareArgs.length !== 0) {\n throw new FormulaError('#N/A', 'Number of arguments for NOW is incorrect.');\n }\n }\n\n protected main() {\n return new Date();\n }\n}\n","import { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class AndFunction extends BaseFunction {\n example = 'AND(A1=1, A2=2)';\n helpText = ['Returns TRUE if all arguments are logically TRUE.', 'Returns FALSE if any argument is logically FALSE.'];\n helpArgs = [\n { name: 'expression1', description: 'First logical expression.' },\n {\n name: 'expression2',\n description: 'Additional expressions',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n this.bareArgs = this.bareArgs.map((arg) => ensureBoolean(arg));\n }\n\n protected main(...values: boolean[]) {\n return values.reduce((a, b) => a && b);\n }\n}\n","import { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class OrFunction extends BaseFunction {\n example = 'OR(A1=1, A2=2)';\n helpText = ['Returns TRUE if any argument is logically true.', 'Returns FALSE if all arguments are logically false.'];\n helpArgs = [\n { name: 'expression1', description: 'First logical expression.' },\n {\n name: 'expression2',\n description: 'Additional expressions',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n this.bareArgs = this.bareArgs.map((arg) => ensureBoolean(arg));\n }\n\n protected main(...values: boolean[]) {\n return values.reduce((a, b) => a || b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class IfFunction extends BaseFunction {\n example = 'IF(A2 = \"Human\", \"Hello\", \"World\")';\n helpText = [\n 'If the logical expression is TRUE, the second argument is returned.',\n 'If FALSE, the third argument is returned.',\n ];\n helpArgs = [\n { name: 'condition', description: 'An expression as a condition' },\n {\n name: 'value1',\n description: 'value to be returned if the condition is true.',\n },\n {\n name: 'value2',\n description: 'value to be returned if the condition is false.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 2 || this.bareArgs.length === 3) {\n this.bareArgs[0] = ensureBoolean(this.bareArgs[0]);\n return;\n }\n throw new FormulaError('#N/A', 'Number of arguments for IF is incorrect. 2 or 3 arguments must be specified.');\n }\n\n protected main(condition: boolean, v1: any, v2: any = false) {\n return condition ? v1 : v2;\n }\n}\n","// DO NOT COPY THIS CODE FOR THE OTHER.\n\nimport { Table } from '../../lib/table';\nimport { Expression, FormulaError } from '../evaluator';\nimport { FunctionProps } from './__base';\nimport { stripTable } from '../../formula/solver';\n\nexport class IfErrorFunction {\n example = 'IFERROR(A1, \"Error in cell A1\")';\n helpText = [\n 'Returns the first argument if it is not an error value, otherwise returns the second argument if present, or a blank if the second argument is absent.',\n ];\n helpArgs = [\n {\n name: 'value',\n description: 'The value to return if value itself is not an error.',\n },\n {\n name: 'value_if_error',\n description: 'The value the function returns if value is an error.',\n optional: true,\n },\n ];\n private args: Expression[];\n private table: Table;\n\n constructor({ args, table }: FunctionProps) {\n this.args = args;\n this.table = table;\n }\n\n protected validate() {\n if (this.args.length === 1 || this.args.length === 2) {\n return;\n }\n throw new FormulaError(\n '#N/A',\n 'Number of arguments for IFERROR is incorrect. 1 or 2 argument(s) must be specified.',\n );\n }\n\n public call() {\n this.validate();\n const [value, valueIfError] = this.args;\n\n try {\n return stripTable({ value: value.evaluate({ table: this.table }) });\n } catch (e) {\n return stripTable({ value: valueIfError?.evaluate({ table: this.table }) });\n }\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class NotFunction extends BaseFunction {\n example = 'NOT(TRUE)';\n helpText = ['Returns the inverse of the Boolean; if TRUE, NOT returns FALSE.', 'If FALSE, NOT returns TRUE.'];\n helpArgs = [\n {\n name: 'logical expression',\n description: 'A logical expression as a boolean.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 1) {\n this.bareArgs[0] = ensureBoolean(this.bareArgs[0]);\n return;\n }\n throw new FormulaError('#N/A', 'Number of arguments for NOT is incorrect. 1 argument must be specified.');\n }\n\n protected main(v1: boolean) {\n return !v1;\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class CountFunction extends BaseFunction {\n example = 'COUNT(A2:A100,B2:B100,4,26)';\n helpText = ['Returns the count of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: any[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(...solveTable({ table: arg }).reduce((a, b) => a.concat(b)));\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: any[]) {\n return values.filter((v) => typeof v === 'number').length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { check, ensureString } from './__utils';\n\nexport class CountifFunction extends BaseFunction {\n example = 'COUNTIF(A1:A10,\">20\")';\n helpText = ['Returns the count of a series of cells.'];\n helpArgs = [\n { name: 'range', description: 'Target range.' },\n {\n name: 'condition',\n description: 'A condition for count.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for COUNTIF is incorrect.');\n }\n this.bareArgs[1] = ensureString(this.bareArgs[1]);\n }\n\n protected main(table: Table, condition: string) {\n const matrix = solveTable({ table });\n return matrix.reduce((a, b) => a.concat(b)).filter((v: any) => check(v, condition)).length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { check, ensureString } from './__utils';\nimport { stripTable } from '../../formula/solver';\nimport { AreaType } from '../../types';\n\nexport class SumifFunction extends BaseFunction {\n example = 'SUMIF(A1:A10,\">20\")';\n helpText = ['Returns the sum of a series of cells.'];\n helpArgs = [\n { name: 'range1', description: 'A condition range.' },\n {\n name: 'condition',\n description: 'A condition for summarization.',\n },\n {\n name: 'range2',\n description: 'A range to be summarized.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2 && this.bareArgs.length !== 3) {\n throw new FormulaError('#N/A', 'Number of arguments for SUMIF is incorrect.');\n }\n if (this.bareArgs[2] != undefined && this.bareArgs[2] instanceof Table) {\n throw new FormulaError('#N/A', '3rd argument must be range.');\n }\n this.bareArgs[1] = ensureString(this.bareArgs[1]);\n }\n\n protected main(range: Table, condition: string, sumRange: Table) {\n if (!(range instanceof Table)) {\n return check(range, condition) ? range : 0;\n }\n const conditionMatrix = solveTable({ table: range });\n let sumMatrix = conditionMatrix;\n if (sumRange) {\n const [top, left] = [sumRange.top, sumRange.left];\n const area: AreaType = {\n top,\n left,\n bottom: top + sumRange.getNumRows(),\n right: left + sumRange.getNumCols(),\n };\n sumMatrix = solveTable({ table: this.table.trim(area) });\n }\n let total = 0;\n conditionMatrix.forEach((row, y) =>\n row.forEach((c, x) => {\n const s = stripTable({ value: sumMatrix[y]?.[x] ?? 0 });\n if (typeof s === 'number' && check(c, condition)) {\n total += s;\n }\n }),\n );\n return total;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean, ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\n\nexport class VlookupFunction extends BaseFunction {\n example = 'VLOOKUP(10003, A2:B26, 2, FALSE)';\n helpText = [\n 'Searches vertically for the specified key in the first column of the range and returns the value of the specified cell in the same row.',\n ];\n helpArgs = [\n { name: 'key', description: 'Search key.' },\n {\n name: 'range',\n description: 'A range for search',\n },\n {\n name: 'index',\n description: 'The index of the column in the range.',\n },\n {\n name: 'is_sorted',\n description:\n 'FALSE: Exact match. This is recommended. TRUE: Approximate match. Before you use an approximate match, sort your search key in ascending order. Otherwise, you may likely get a wrong return value.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 3 && this.bareArgs.length !== 4) {\n throw new FormulaError('#N/A', 'Number of arguments for VLOOKUP is incorrect.');\n }\n if (this.bareArgs[0] instanceof Table) {\n this.bareArgs[0] = stripTable({ value: this.bareArgs[0] });\n }\n if (!(this.bareArgs[1] instanceof Table)) {\n throw new FormulaError('#REF!', '2nd argument must be range');\n }\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n this.bareArgs[3] = ensureBoolean(this.bareArgs[3], { alternative: true });\n }\n\n protected main(key: any, range: Table, index: number, isSorted: boolean) {\n const matrix = solveTable({ table: range });\n if (isSorted) {\n let last = -1;\n for (let y = 0; y <= range.getNumRows(); y++) {\n const v = matrix[y]?.[0];\n if (v == null) {\n continue;\n }\n if (v <= key) {\n last = y;\n } else {\n break;\n }\n }\n if (last !== -1) {\n return matrix[last]?.[index - 1];\n }\n } else {\n for (let y = 0; y <= range.getNumRows(); y++) {\n if (matrix[y]?.[0] === key) {\n return matrix[y]?.[index - 1];\n }\n }\n }\n throw new FormulaError('#N/A', `No values found for '${key}'.`);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean, ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\n\nexport class HlookupFunction extends BaseFunction {\n example = 'HLOOKUP(10003, A2:Z6, 2, FALSE)';\n helpText = [\n 'Searches horizontally for the specified key in the first row of the range and returns the value of the specified cell in the same column.',\n ];\n helpArgs = [\n { name: 'key', description: 'Search key.' },\n {\n name: 'range',\n description: 'A range for search',\n },\n {\n name: 'index',\n description: 'The index of the row in the range.',\n },\n {\n name: 'is_sorted',\n description:\n 'FALSE: Exact match. This is recommended. TRUE: Approximate match. Before you use an approximate match, sort your search key in ascending order. Otherwise, you may likely get a wrong return value.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 3 && this.bareArgs.length !== 4) {\n throw new FormulaError('#N/A', 'Number of arguments for HLOOKUP is incorrect.');\n }\n if (this.bareArgs[0] instanceof Table) {\n this.bareArgs[0] = stripTable({ value: this.bareArgs[0] });\n }\n if (!(this.bareArgs[1] instanceof Table)) {\n throw new FormulaError('#REF!', '2nd argument must be range');\n }\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n this.bareArgs[3] = ensureBoolean(this.bareArgs[3], { alternative: true });\n }\n\n protected main(key: any, range: Table, index: number, isSorted: boolean) {\n const matrix = solveTable({ table: range });\n if (isSorted) {\n let last = -1;\n for (let x = 0; x <= range.getNumCols(); x++) {\n const v = matrix[0]?.[x];\n if (v == null) {\n continue;\n }\n if (v <= key) {\n last = x;\n } else {\n break;\n }\n }\n if (last !== -1) {\n return matrix[index - 1]?.[last];\n }\n } else {\n for (let x = 0; x <= range.getNumCols(); x++) {\n if (matrix[0]?.[x] === key) {\n return matrix[index - 1]?.[x];\n }\n }\n }\n throw new FormulaError('#N/A', `No values found for '${key}'.`);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class IndexFunction extends BaseFunction {\n example = 'INDEX(A1:C10, 2, 3)';\n helpText = [\n 'Returns a trimmed table based on row and column indices.',\n 'If row or column is 0 or omitted, returns all rows or columns.',\n ];\n helpArgs = [\n { name: 'table', description: 'A range of cells.' },\n { name: 'y', description: 'The row number in the table (0 or omitted for all rows).', optional: true },\n { name: 'x', description: 'The column number in the table (0 or omitted for all columns).', optional: true },\n ];\n\n protected validate() {\n if (this.bareArgs.length < 1 || this.bareArgs.length > 3) {\n throw new FormulaError('#N/A', 'Number of arguments for INDEX is incorrect.');\n }\n\n if (!(this.bareArgs[0] instanceof Table)) {\n throw new FormulaError('#VALUE!', 'First argument must be a range.');\n }\n\n if (this.bareArgs.length >= 2) {\n this.bareArgs[1] = ensureNumber(this.bareArgs[1]);\n if (this.bareArgs[1] < 0) {\n throw new FormulaError('#VALUE!', 'Row number must be greater than or equal to 0.');\n }\n }\n\n if (this.bareArgs.length === 3) {\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n if (this.bareArgs[2] < 0) {\n throw new FormulaError('#VALUE!', 'Column number must be greater than or equal to 0.');\n }\n }\n }\n\n protected main(table: Table, y?: number, x?: number) {\n const area = table.getArea();\n if (y) {\n if (y < 0 || y > table.getNumRows(1)) {\n throw new FormulaError('#NUM!', `Row number ${y} is out of range.`);\n }\n area.top = area.bottom = area.top + y - 1;\n }\n if (x) {\n if (x < 0 || x > table.getNumCols(1)) {\n throw new FormulaError('#NUM!', `Column number ${x} is out of range.`);\n }\n area.left = area.right = area.left + x - 1;\n }\n return table.trim(area);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\n\nexport class MatchFunction extends BaseFunction {\n example = 'MATCH(\"apple\", A1:A10, 0)';\n helpText = [\n 'Searches for a value in a table and returns its position.',\n 'Returns the position of the matched value (1-based index).',\n ];\n helpArgs = [\n { name: 'search_key', description: 'The value to search for.' },\n { name: 'range', description: 'The range to search in.' },\n {\n name: 'search_type',\n description: '0 for exact match, 1 for less than or equal, -1 for greater than or equal.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length < 2 || this.bareArgs.length > 3) {\n throw new FormulaError('#N/A', 'Number of arguments for MATCH is incorrect.');\n }\n\n if (this.bareArgs[0] instanceof Table) {\n this.bareArgs[0] = stripTable({ value: this.bareArgs[0] });\n }\n\n if (!(this.bareArgs[1] instanceof Table)) {\n throw new FormulaError('#VALUE!', 'Second argument must be a range.');\n }\n\n if (this.bareArgs.length === 3) {\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n if (![-1, 0, 1].includes(this.bareArgs[2])) {\n throw new FormulaError('#VALUE!', 'Match type must be -1, 0, or 1.');\n }\n } else {\n this.bareArgs[2] = 1; // Default to 1 (less than or equal)\n }\n }\n\n protected main(searchKey: any, range: Table, searchType: number = 1) {\n const matrix = solveTable({ table: range });\n // Check if matrix is 1-dimensional (either 1 row or 1 column)\n const numRows = matrix.length;\n const numCols = matrix[0]?.length || 0;\n if (!((numRows === 1 && numCols >= 1) || (numCols === 1 && numRows >= 1))) {\n throw new FormulaError('#N/A', 'Range must be a single row or single column.');\n }\n const array = matrix.reduce((acc, row) => acc.concat(row), []);\n\n if (array.length === 0) {\n throw new FormulaError('#N/A', 'range is empty.');\n }\n\n switch (searchType) {\n case 0: // Exact match\n for (let i = 0; i < array.length; i++) {\n if (array[i] === searchKey) {\n return i + 1; // 1-based index\n }\n }\n throw new FormulaError('#N/A', 'Value not found in range.');\n\n case 1: // Less than or equal (assumes sorted ascending)\n for (let i = array.length - 1; i >= 0; i--) {\n if (array[i] <= searchKey) {\n return i + 1; // 1-based index\n }\n }\n throw new FormulaError('#N/A', 'No value less than or equal to lookup value.');\n\n case -1: // Greater than or equal (assumes sorted descending)\n let lastIdx = -1;\n for (let i = 0; i < array.length; i++) {\n if (Number(array[i]) >= Number(searchKey)) {\n lastIdx = i;\n }\n }\n if (lastIdx !== -1) {\n return lastIdx + 1; // 1-based index\n }\n throw new FormulaError('#N/A', 'No value greater than or equal to lookup value.');\n\n default:\n throw new FormulaError('#VALUE!', 'Invalid search type.');\n }\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class LogFunction extends BaseFunction {\n example = 'LOG(128, 2)';\n helpText = ['Returns the logarithm of a number whose base is the specified number.'];\n helpArgs = [\n {\n name: 'value',\n description: 'The value for the logarithm of the specified number as base.',\n },\n { name: 'base', description: 'An exponent to power the base.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for LOG is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] <= 0) {\n throw new FormulaError('NUM!', 'value must be greater than 0');\n }\n if (this.bareArgs[1] <= 1) {\n throw new FormulaError('NUM!', 'base must be greater than 1');\n }\n }\n\n protected main(value: number, base: number) {\n return Math.log2(value) / Math.log2(base);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class Log10Function extends BaseFunction {\n example = 'LOG10(100)';\n helpText = ['Returns the logarithm of 10'];\n helpArgs = [\n {\n name: 'value',\n description: 'The value for the logarithm of 10',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LOG10 is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] <= 0) {\n throw new FormulaError('NUM!', 'value must be greater than 0');\n }\n }\n\n protected main(value: number) {\n return Math.log10(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class LnFunction extends BaseFunction {\n example = 'LN(100)';\n helpText = ['Returns the logarithm of e'];\n helpArgs = [\n {\n name: 'value',\n description: 'The value for the logarithm of e',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] <= 0) {\n throw new FormulaError('NUM!', 'value must be greater than 0');\n }\n }\n\n protected main(value: number) {\n return Math.log(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AbsFunction extends BaseFunction {\n example = 'ABS(-2)';\n helpText = ['Returns the absolute value of a number'];\n helpArgs = [{ name: 'value', description: 'target number' }];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ABS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number) {\n return Math.abs(value);\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class ProductFunction extends BaseFunction {\n example = 'PRODUCT(A2:A100)';\n helpText = ['Returns the product of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: number[] = [];\n this.bareArgs.forEach((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n return values.reduce((a, b) => a * b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class RandFunction extends BaseFunction {\n example = 'RAND()';\n helpText = ['Returns a random number between 0 and 1.'];\n helpArgs = [];\n\n protected validate() {\n if (this.bareArgs.length !== 0) {\n throw new FormulaError('#N/A', 'Number of arguments for RAND is incorrect.');\n }\n }\n\n protected main() {\n return Math.random();\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class PiFunction extends BaseFunction {\n example = 'PI()';\n helpText = ['Returns the value of pi.'];\n helpArgs = [];\n\n protected validate() {\n if (this.bareArgs.length !== 0) {\n throw new FormulaError('#N/A', 'Number of arguments for PI is incorrect.');\n }\n }\n\n protected main() {\n return Math.PI;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class ExpFunction extends BaseFunction {\n example = 'EXP(2)';\n helpText = ['Returns the power of a number whose base is the Euler number e.'];\n helpArgs = [\n {\n name: 'exponent',\n description: 'It is an exponent of power with e as the base.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for EXP is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(exponent: number) {\n return Math.exp(exponent);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RadiansFunction extends BaseFunction {\n example = 'RADIANS(180)';\n helpText = ['Converts an angle from degrees to radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'The angle to convert from degrees to radians.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for RADIANS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return (angle / 180) * Math.PI;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class PowerFunction extends BaseFunction {\n example = 'POWER(4,0.5)';\n helpText = ['Returns a number multiplied by an exponent.'];\n helpArgs = [\n { name: 'base', description: 'A number to be multiplied by an exponent.' },\n { name: 'exponent', description: 'An exponent to power the base.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for POWER is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(base: number, exponent: number) {\n return Math.pow(base, exponent);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class SqrtFunction extends BaseFunction {\n example = 'SQRT(9)';\n helpText = ['Returns the positive square root of a positive number.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number for which the positive square root is to be found.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for SQRT is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] < 0) {\n throw new FormulaError('NUM!', 'First argument must be positive.');\n }\n }\n\n protected main(value: number) {\n return Math.sqrt(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RoundFunction extends BaseFunction {\n example = 'ROUND(99.44,1)';\n helpText = ['Round a number to the specified number of decimal places according to standard rules.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number to be rounded.',\n },\n {\n name: 'digit',\n description: 'The number of decimal places after rounding.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1 && this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ROUND is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number, digit = 0) {\n const multiplier = Math.pow(10, digit);\n return Math.round(value * multiplier) / multiplier;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RoundupFunction extends BaseFunction {\n example = 'ROUNDUP(99.44,1)';\n helpText = ['Round up a number to the specified number of decimal places according to standard rules.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number to be rounded up.',\n },\n {\n name: 'digit',\n description: 'The number of decimal places after rounding.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1 && this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ROUNDUP is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number, digit = 0) {\n const multiplier = Math.pow(10, digit);\n return Math.ceil(value * multiplier) / multiplier;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RounddownFunction extends BaseFunction {\n example = 'ROUNDDOWN(99.44,1)';\n helpText = ['Round down a number to the specified number of decimal places according to standard rules.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number to be rounded down.',\n },\n {\n name: 'digit',\n description: 'The number of decimal places after rounding.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1 && this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ROUNDDOWN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number, digit = 0) {\n const multiplier = Math.pow(10, digit);\n return Math.floor(value * multiplier) / multiplier;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class SinFunction extends BaseFunction {\n example = 'SIN(PI()/2)';\n helpText = ['Returns the sin of the angle specified in radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'An angle in radians, at which you want the sin.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for SIN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return Math.sin(angle);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class CosFunction extends BaseFunction {\n example = 'COS(PI()/2)';\n helpText = ['Returns the cos of the angle specified in radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'An angle in radians, at which you want the cos.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for COS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return Math.cos(angle);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class TanFunction extends BaseFunction {\n example = 'TAN(1)';\n helpText = ['Returns the tan of the angle specified in radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'An angle in radians, at which you want the tan.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for TAN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return Math.tan(angle);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AsinFunction extends BaseFunction {\n example = 'ASIN(0)';\n helpText = ['Returns the inverse sin of the value in radians.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A value for the inverse sin between -1 and 1.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ASIN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (-1 > this.bareArgs[0] || this.bareArgs[0] > 1) {\n throw new FormulaError('#NUM!', 'value must be between -1 and 1');\n }\n }\n\n protected main(value: number) {\n return Math.asin(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AcosFunction extends BaseFunction {\n example = 'ACOS(0)';\n helpText = ['Returns the inverse cos of the value in radians.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A value for the inverse cos between -1 and 1.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ACOS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (-1 > this.bareArgs[0] || this.bareArgs[0] > 1) {\n throw new FormulaError('#NUM!', 'value must be between -1 and 1');\n }\n }\n\n protected main(value: number) {\n return Math.acos(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AtanFunction extends BaseFunction {\n example = 'ATAN(1)';\n helpText = ['Returns the inverse tan of the value in radians.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A value for the inverse tan.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ATAN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number) {\n return Math.atan(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class Atan2Function extends BaseFunction {\n example = 'ATAN2(4,3)';\n helpText = [\n 'Returns the angle in radians between the x-axis and a line passing from the origin through a given coordinate point (x, y).',\n ];\n helpArgs = [\n {\n name: 'x',\n description: 'x of the point.',\n },\n {\n name: 'y',\n description: 'y of the point.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ATAN2 is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(x: number, y: number) {\n return Math.atan2(x, y);\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class CountaFunction extends BaseFunction {\n example = 'COUNTA(A2:A100,B2:B100,4,26)';\n helpText = ['Returns the number of values in the data set.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: any[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(...solveTable({ table: arg }).reduce((a, b) => a.concat(b)));\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: any[]) {\n return values.filter((v) => v != null && v !== '').length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AverageFunction extends BaseFunction {\n example = 'AVERAGE(A2:A100, 101)';\n helpText = ['Returns the average of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: number[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n if (spreaded.length === 0) {\n throw new FormulaError('#N/A', 'Number of arguments must be greater than 0.');\n }\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n return values.reduce((a, b) => a + b) / values.length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class MaxFunction extends BaseFunction {\n example = 'MAX(A2:A100, 101)';\n helpText = ['Returns the max in a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n throw new FormulaError('#N/A', 'Number of arguments must be greater than 0.');\n }\n const spreaded: number[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n if (values.length === 0) {\n return 0;\n }\n return Math.max(...values);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class MinFunction extends BaseFunction {\n example = 'MIN(A2:A100, 101)';\n helpText = ['Returns the min in a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n throw new FormulaError('#N/A', 'Number of arguments must be greater than 0.');\n }\n const spreaded: number[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n if (values.length === 0) {\n return 0;\n }\n return Math.min(...values);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class LenFunction extends BaseFunction {\n example = 'LEN(A2)';\n helpText = ['Returns the length of a string.'];\n helpArgs = [\n {\n name: 'text',\n description: 'A text to be returned the length.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LEN is incorrect.');\n }\n this.bareArgs = [ensureString(this.bareArgs[0])];\n }\n\n protected main(text: string) {\n return text.length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class LenbFunction extends BaseFunction {\n example = 'LENB(A2)';\n helpText = ['Returns the number of bytes in the length of the string.'];\n helpArgs = [\n {\n name: 'text',\n description: 'A text to be returned the length of the bytes.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LENB is incorrect.');\n }\n this.bareArgs = [ensureString(this.bareArgs[0])];\n }\n\n protected main(text: string) {\n return encodeURIComponent(text).replace(/%../g, 'x').length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class UminusFunction extends BaseFunction {\n example = 'UMINUS(4)';\n helpText = ['Returns a number with positive and negative values reversed.'];\n helpArgs = [{ name: 'value1', description: 'A number that will be subtracted.' }];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'A single numerical value is only required.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(v1: number) {\n return -v1;\n }\n}\n","import { Table } from '../../lib/table';\nimport { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class RowFunction extends BaseFunction {\n example = 'ROW(A9)';\n helpText = ['Returns the row number of a specified cell.'];\n helpArgs = [\n {\n name: 'cell_reference',\n description: 'The cell whose row number will be returned.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n this.bareArgs = [this.origin?.y ?? 1];\n } else if (this.bareArgs.length === 1) {\n const table = this.bareArgs[0] as Table;\n this.bareArgs = [table.top];\n } else {\n throw new FormulaError('#N/A', 'Number of arguments for ROW is incorrect.');\n }\n }\n\n protected main(top: number) {\n return top;\n }\n}\n","import { Table } from '../../lib/table';\nimport { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class ColFunction extends BaseFunction {\n example = 'COL(A9)';\n helpText = ['Returns the col number of a specified cell.'];\n helpArgs = [\n {\n name: 'cell_reference',\n description: 'The cell whose col number will be returned.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n this.bareArgs = [this.origin?.x ?? 1];\n } else if (this.bareArgs.length === 1) {\n const table = this.bareArgs[0] as Table;\n this.bareArgs = [table.left];\n } else {\n throw new FormulaError('#N/A', 'Number of arguments for COL is incorrect.');\n }\n }\n\n protected main(left: number) {\n return left;\n }\n}\n","import { AddFunction } from './functions/add';\nimport { MinusFunction } from './functions/minus';\nimport { MultiplyFunction } from './functions/multiply';\nimport { DivideFunction } from './functions/divide';\nimport { ModFunction } from './functions/mod';\nimport { SumFunction } from './functions/sum';\nimport { ConcatFunction } from './functions/concat';\nimport { ConcatenateFunction } from './functions/concatenate';\nimport { EqFunction } from './functions/eq';\nimport { NeFunction } from './functions/ne';\nimport { GtFunction } from './functions/gt';\nimport { GteFunction } from './functions/gte';\nimport { LtFunction } from './functions/lt';\nimport { LteFunction } from './functions/lte';\nimport { NowFunction } from './functions/now';\nimport { AndFunction } from './functions/and';\nimport { OrFunction } from './functions/or';\nimport { IfFunction } from './functions/if';\nimport { IfErrorFunction } from './functions/iferror';\nimport { NotFunction } from './functions/not';\nimport { CountFunction } from './functions/count';\nimport { CountifFunction } from './functions/countif';\nimport { SumifFunction } from './functions/sumif';\nimport { VlookupFunction } from './functions/vlookup';\nimport { HlookupFunction } from './functions/hlookup';\nimport { IndexFunction } from './functions/index';\nimport { MatchFunction } from './functions/match';\nimport { LogFunction } from './functions/log';\nimport { Log10Function } from './functions/log10';\nimport { LnFunction } from './functions/ln';\nimport { AbsFunction } from './functions/abs';\nimport { ProductFunction } from './functions/product';\nimport { RandFunction } from './functions/rand';\nimport { PiFunction } from './functions/pi';\nimport { ExpFunction } from './functions/exp';\nimport { RadiansFunction } from './functions/radians';\nimport { PowerFunction } from './functions/power';\nimport { SqrtFunction } from './functions/sqrt';\nimport { RoundFunction } from './functions/round';\nimport { RoundupFunction } from './functions/roundup';\nimport { RounddownFunction } from './functions/rounddown';\nimport { SinFunction } from './functions/sin';\nimport { CosFunction } from './functions/cos';\nimport { TanFunction } from './functions/tan';\nimport { AsinFunction } from './functions/asin';\nimport { AcosFunction } from './functions/acos';\nimport { AtanFunction } from './functions/atan';\nimport { Atan2Function } from './functions/atan2';\nimport { CountaFunction } from './functions/counta';\nimport { AverageFunction } from './functions/average';\nimport { MaxFunction } from './functions/max';\nimport { MinFunction } from './functions/min';\nimport { LenFunction } from './functions/len';\nimport { LenbFunction } from './functions/lenb';\nimport { UminusFunction } from './functions/uminus';\nimport { RowFunction } from './functions/row';\nimport { ColFunction } from './functions/col';\nimport type { FunctionMapping } from './functions/__base';\n\nexport const functions: FunctionMapping = {\n abs: AbsFunction,\n add: AddFunction,\n divide: DivideFunction,\n mod: ModFunction,\n minus: MinusFunction,\n uminus: UminusFunction,\n multiply: MultiplyFunction,\n pow: PowerFunction,\n power: PowerFunction,\n sqrt: SqrtFunction,\n sum: SumFunction,\n sumif: SumifFunction,\n max: MaxFunction,\n min: MinFunction,\n average: AverageFunction,\n count: CountFunction,\n counta: CountaFunction,\n countif: CountifFunction,\n product: ProductFunction,\n concat: ConcatFunction,\n concatenate: ConcatenateFunction,\n eq: EqFunction,\n ne: NeFunction,\n gt: GtFunction,\n gte: GteFunction,\n lt: LtFunction,\n lte: LteFunction,\n and: AndFunction,\n or: OrFunction,\n round: RoundFunction,\n rounddown: RounddownFunction,\n roundup: RoundupFunction,\n if: IfFunction,\n // @ts-expect-error iferror does not extends BaseFunction\n iferror: IfErrorFunction,\n not: NotFunction,\n vlookup: VlookupFunction,\n hlookup: HlookupFunction,\n index: IndexFunction,\n match: MatchFunction,\n row: RowFunction,\n col: ColFunction,\n column: ColFunction,\n now: NowFunction,\n rand: RandFunction,\n log: LogFunction,\n log10: Log10Function,\n ln: LnFunction,\n exp: ExpFunction,\n pi: PiFunction,\n radians: RadiansFunction,\n sin: SinFunction,\n cos: CosFunction,\n tan: TanFunction,\n asin: AsinFunction,\n acos: AcosFunction,\n atan: AtanFunction,\n atan2: Atan2Function,\n len: LenFunction,\n lenb: LenbFunction,\n};\n","import { DEFAULT_HISTORY_LIMIT, RESET_ZONE } from '../constants';\n\nimport type {\n HistoryType,\n RefPaletteType,\n SheetIdsByName,\n ContextsBySheetId,\n ZoneType,\n CellsByIdType,\n Id,\n StoreDispatchType,\n CellType,\n System,\n FeedbackType,\n EditorEvent,\n CursorStateType,\n} from '../types';\nimport type { UserTable } from './table';\nimport { useEffect, useState } from 'react';\nimport { updateTable } from '../store/actions';\nimport type { FunctionMapping } from '../formula/functions/__base';\nimport { functions as functionsDefault } from '../formula/mapping';\nimport { PolicyType } from '../policy/core';\nimport { RendererType } from '../renderers/core';\nimport { ParserType } from '../parsers/core';\nimport { Table } from './table';\n\nexport type WireProps = {\n historyLimit?: number;\n additionalFunctions?: FunctionMapping;\n renderers?: { [rendererName: string]: RendererType | null };\n parsers?: { [parserName: string]: ParserType | null };\n labelers?: { [labelerName: string]: ((n: number) => string) | null };\n policies?: { [policyName: string]: PolicyType | null };\n onSave?: FeedbackType;\n onChange?: FeedbackType;\n onEdit?: (args: { table: UserTable }) => void;\n onRemoveRows?: (args: { table: UserTable; ys: number[] }) => void;\n onRemoveCols?: (args: { table: UserTable; xs: number[] }) => void;\n onInsertRows?: (args: { table: UserTable; y: number; numRows: number }) => void;\n onInsertCols?: (args: { table: UserTable; x: number; numCols: number }) => void;\n onSelect?: FeedbackType;\n onKeyUp?: (args: { e: EditorEvent; points: CursorStateType }) => void;\n onInit?: (args: { table: UserTable }) => void;\n};\n\nexport type HubProps = WireProps;\n\nexport class Wire {\n sheetHead: number = 0;\n cellHead: number = 0;\n data: CellsByIdType = {};\n sheetIdsByName: SheetIdsByName = {};\n contextsBySheetId: ContextsBySheetId = {};\n choosingSheetId: number = 0;\n choosingAddress: string = '';\n editingSheetId: number = 0;\n editingAddress: string = '';\n paletteBySheetName: { [sheetName: string]: RefPaletteType } = {};\n lastFocused: HTMLTextAreaElement | null = null;\n solvedCaches: Map<Id, any> = new Map();\n copyingSheetId: number = 0;\n copyingZone: ZoneType = RESET_ZONE;\n cutting: boolean = false;\n histories: HistoryType[] = [];\n historyIndex: number = -1;\n historyLimit: number = DEFAULT_HISTORY_LIMIT;\n lastHistory?: HistoryType;\n currentHistory?: HistoryType;\n ready = false;\n functions: FunctionMapping = {};\n renderers: { [rendererName: string]: RendererType | null } = {};\n parsers: { [parserName: string]: ParserType | null } = {};\n labelers: { [labelerName: string]: ((n: number) => string) | null } = {};\n policies: { [policyName: string]: PolicyType | null } = {};\n onSave?: FeedbackType;\n onChange?: FeedbackType;\n onEdit?: (args: { table: UserTable }) => void;\n onRemoveRows?: (args: { table: UserTable; ys: number[] }) => void;\n onRemoveCols?: (args: { table: UserTable; xs: number[] }) => void;\n onInsertRows?: (args: { table: UserTable; y: number; numRows: number }) => void;\n onInsertCols?: (args: { table: UserTable; x: number; numCols: number }) => void;\n onSelect?: FeedbackType;\n onKeyUp?: (args: { e: EditorEvent; points: CursorStateType }) => void;\n onInit?: (args: { table: UserTable }) => void;\n\n transmit: (newHub?: TransmitProps) => void = (newHub?: TransmitProps) => {\n // This method will be overridden by useHub\n };\n\n public identifyFormula() {\n if (this.ready || Object.keys(this.contextsBySheetId).length === 0) {\n return;\n }\n const keys = Object.keys(this.contextsBySheetId);\n const tobe: StoreDispatchType[] = [];\n for (let i = 0; i < keys.length; i++) {\n const sheetId = keys[i];\n const storeDispatch = this.contextsBySheetId[sheetId];\n const table = storeDispatch.store.tableReactive.current;\n if (!table || table.status === 0) {\n return;\n }\n tobe.push(storeDispatch);\n }\n for (let i = 0; i < tobe.length; i++) {\n const { store, dispatch } = tobe[i];\n const table = store.tableReactive.current;\n if (!table) {\n continue;\n }\n table.identifyFormula();\n dispatch(updateTable(table));\n }\n this.ready = true;\n }\n\n public getSystem(id: Id, table: Table): System {\n const cell = this.data[id];\n if (cell?.system) {\n return cell.system;\n }\n return {\n id,\n sheetId: table.sheetId,\n changedAt: new Date(),\n dependents: new Set(),\n };\n }\n\n constructor({\n historyLimit,\n additionalFunctions,\n renderers = {},\n parsers = {},\n labelers = {},\n policies = {},\n onSave,\n onChange,\n onEdit,\n onRemoveRows,\n onRemoveCols,\n onInsertRows,\n onInsertCols,\n onSelect,\n onKeyUp,\n onInit,\n }: WireProps = {}) {\n if (historyLimit != null) {\n this.historyLimit = historyLimit;\n }\n this.functions = {\n ...functionsDefault,\n ...additionalFunctions,\n };\n this.renderers = renderers;\n this.parsers = parsers;\n this.labelers = labelers;\n this.policies = policies;\n this.onSave = onSave;\n this.onChange = onChange;\n this.onEdit = onEdit;\n this.onRemoveRows = onRemoveRows;\n this.onRemoveCols = onRemoveCols;\n this.onInsertRows = onInsertRows;\n this.onInsertCols = onInsertCols;\n this.onSelect = onSelect;\n this.onKeyUp = onKeyUp;\n this.onInit = onInit;\n }\n}\n\nexport type TransmitProps = Partial<Wire>;\n\nexport const createWire = (props: WireProps = {}) => {\n return new Wire(props);\n};\n\nexport type HubType = {\n wire: Wire;\n};\n\nexport const createHub = (props: WireProps = {}): HubType => {\n return { wire: createWire(props) };\n};\n\nexport const useHub = (props: WireProps = {}) => {\n const [hub, setHub] = useState<HubType>(() => createHub(props));\n const { wire } = hub;\n wire.transmit = (patch?: TransmitProps) => {\n Object.assign(wire, patch);\n if (!wire.ready) {\n return;\n }\n requestAnimationFrame(() => setHub({ wire }));\n };\n useEffect(() => {\n Object.assign(wire, props);\n }, [props]);\n return hub;\n};\n","import type { UserTable } from '../lib/table';\nimport type { CellPatchType, CellType, OperationType, PointType } from '../types';\n\nexport type PolicyOption = {\n value: any;\n label?: any;\n keywords?: string[];\n};\n\nexport type RestrictProps = {\n table: UserTable;\n point: PointType;\n original?: CellType;\n patch?: CellType;\n operation: OperationType;\n};\n\nexport type OnClipProps = {\n table: UserTable;\n point: PointType;\n};\n\nexport type GetDefaultProps = {\n table: UserTable;\n point: PointType;\n value: any;\n};\n\nexport type PolicyMixinType = {\n getDefault?: (props: GetDefaultProps) => CellType | undefined;\n select?: (props: RestrictProps) => CellType | undefined;\n validate?: (props: RestrictProps) => CellType | undefined;\n onClip?: (props: OnClipProps) => string;\n getOptions?: () => PolicyOption[];\n};\n\ntype PolicyProps = {\n mixins?: PolicyMixinType[];\n};\n\nexport class Policy implements PolicyMixinType {\n constructor(props?: PolicyProps) {\n this.applyMixins(props?.mixins);\n }\n\n private applyMixins(mixins?: PolicyMixinType[]) {\n if (mixins == null) {\n return;\n }\n for (const mixin of mixins) {\n for (const key in mixin) {\n (this as any)[key] = (mixin as any)[key];\n }\n }\n }\n\n public getDefault(props: GetDefaultProps): any {\n return { value: null };\n }\n\n public select(props: RestrictProps) {\n const { patch, table, point } = props;\n const options = this.getOptions();\n const index = options.findIndex((option) => option.value === patch?.value);\n if (options.length > 0 && index === -1) {\n return { ...patch, ...this.getDefault({ table, point, value: patch?.value }) };\n }\n return patch;\n }\n\n public validate(props: RestrictProps): CellPatchType | undefined {\n const { patch } = props;\n return patch;\n }\n\n public restrict(props: RestrictProps): CellPatchType | undefined {\n const patch = this.select(props);\n return this.validate({ ...props, patch });\n }\n\n public onClip(props: OnClipProps): string {\n const { point, table } = props;\n return table.stringify({ point }) ?? '';\n }\n\n public getOptions(): PolicyOption[] {\n return [];\n }\n}\n\nexport type PolicyType = Policy;\nexport const defaultPolicy = new Policy();\n","import { identifyFormula } from '../formula/evaluator';\nimport { CellsByIdType, Id } from '../types';\nimport { Table } from './table';\n\nexport class ReferencePreserver {\n public map: { [id: Id]: Id } = {};\n private table: Table;\n private dependentIds: Set<Id> = new Set<Id>();\n\n constructor(table: Table) {\n this.table = table;\n }\n\n addTheDependents(...ids: Id[]) {\n ids.forEach((id) => {\n const cell = this.table.wire.data[id];\n cell?.system?.dependents?.forEach((did) => {\n this.dependentIds.add(did);\n });\n });\n }\n\n resolveDependents(operation?: 'move' | 'removeRows' | 'removeCols'): CellsByIdType {\n this.table.clearAddressCaches();\n const diffBefore: CellsByIdType = {};\n this.dependentIds.forEach((id) => {\n const dep = this.table.wire.data[id];\n if (dep == null) {\n return;\n }\n diffBefore[id] = { ...dep };\n dep.value = identifyFormula(dep.value, {\n dependency: id,\n table: this.table,\n idMap: this.map,\n operation,\n });\n });\n\n return diffBefore;\n }\n}\n","import { defaultParser } from '../parsers/core';\nimport { defaultRenderer, RendererCallProps } from '../renderers/core';\nimport {\n Id,\n Ids,\n IdMatrix,\n AreaType,\n CellsByIdType,\n CellsByAddressType,\n PointType,\n Address,\n CellFilter,\n MatrixType,\n CellType,\n HistoryType,\n StorePatchType,\n ShapeType,\n OperatorType,\n OperationType,\n RawCellType,\n ExtraPointType,\n StoreType,\n RefEvaluation,\n} from '../types';\nimport {\n among,\n areaShape,\n createMatrix,\n expandRange,\n getMaxSizesFromCells,\n invertObject,\n matrixShape,\n putMatrix,\n} from './structs';\nimport { a2p, x2c, p2a, y2r, grantAddressAbsolute } from './converters';\nimport { FunctionMapping } from '../formula/functions/__base';\nimport { identifyFormula, Lexer, splitRef, stripSheetName } from '../formula/evaluator';\nimport { solveFormula, stripTable } from '../formula/solver';\n\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, HEADER_HEIGHT, HEADER_WIDTH, DEFAULT_HISTORY_LIMIT } from '../constants';\nimport { shouldTracking } from '../store/helpers';\nimport { updateTable } from '../store/actions';\nimport * as operation from './operation';\nimport { Wire, createWire } from './hub';\nimport { safeQueueMicrotask } from './time';\nimport { defaultPolicy, PolicyType } from '../policy/core';\nimport { escapeSheetName, getSheetPrefix } from './sheet';\nimport { ReferencePreserver } from './reference';\n\ntype Props = {\n minNumRows?: number;\n maxNumRows?: number;\n minNumCols?: number;\n maxNumCols?: number;\n functions?: FunctionMapping;\n sheetName?: string;\n hub?: Wire;\n};\n\nconst noFilter: CellFilter = () => true;\n\ntype GetProps = {\n // do not use 'SYSTEM', it is reserved for internal use.\n refEvaluation?: RefEvaluation;\n raise?: boolean;\n filter?: CellFilter;\n};\n\ntype MoveProps = {\n srcTable?: UserTable;\n src: AreaType;\n dst: AreaType;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n historicize?: boolean;\n};\n\ntype GetFieldProps = GetProps & {\n field?: keyof CellType;\n};\n\ntype GetPropsWithArea = GetProps & {\n area?: AreaType;\n};\n\ntype GetFieldPropsWithArea = GetFieldProps & {\n area?: AreaType;\n};\n\nexport interface UserTable {\n changedAt: Date;\n lastChangedAt?: Date;\n top: number;\n left: number;\n bottom: number;\n right: number;\n minNumRows: number;\n maxNumRows: number;\n minNumCols: number;\n maxNumCols: number;\n headerWidth: number;\n headerHeight: number;\n sheetName: string;\n\n /**\n * Returns the raw table object, which is used for internal operations.\n * This is not intended for public use and may change in future versions.\n */\n __raw__: Table;\n\n getRectSize(area: AreaType): ShapeType;\n getCellByPoint(point: PointType, refEvaluation?: RefEvaluation, raise?: boolean): CellType | undefined;\n getCellByAddress(address: Address, refEvaluation?: RefEvaluation, raise?: boolean): CellType | undefined;\n getNumRows(base?: number): number;\n getNumCols(base?: number): number;\n getFieldMatrix(args?: GetFieldPropsWithArea): any[][];\n getFieldObject(args?: GetFieldProps): { [address: Address]: any };\n getFieldRows(args?: GetFieldProps): { [address: Address]: any }[];\n getFieldCols(args?: GetFieldProps): { [address: Address]: any }[];\n getMatrix(args?: GetPropsWithArea): (CellType | null)[][];\n getObject(args?: GetProps): CellsByAddressType;\n getRows(args?: GetProps): CellsByAddressType[];\n getCols(args?: GetProps): CellsByAddressType[];\n getHistories(): HistoryType[];\n move(args: MoveProps): UserTable;\n copy(args: MoveProps & { onlyValue?: boolean }): UserTable;\n update(args: {\n diff: CellsByAddressType;\n historicize?: boolean;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StorePatchType;\n }): UserTable;\n writeMatrix(args: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n reflection?: StorePatchType;\n }): UserTable;\n write(args: { point: PointType; value: string; updateChangedAt?: boolean; reflection?: StorePatchType }): UserTable;\n insertRows(args: {\n y: number;\n numRows: number;\n baseY: number;\n diff?: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StorePatchType;\n }): UserTable;\n removeRows(args: { y: number; numRows: number; reflection?: StorePatchType }): UserTable;\n insertCols(args: {\n x: number;\n numCols: number;\n baseX: number;\n diff?: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StorePatchType;\n }): UserTable;\n removeCols(args: { x: number; numCols: number; reflection?: StorePatchType }): UserTable;\n undo(): {\n history: HistoryType | null;\n };\n redo(): {\n history: HistoryType | null;\n };\n getHistories(): HistoryType[];\n getHistoryIndex(): number;\n getHistorySize(): number;\n setHeaderHeight(height: number, historicize?: boolean): UserTable;\n setHeaderWidth(width: number, historicize?: boolean): UserTable;\n\n stringify(props: { point: PointType; cell?: CellType; refEvaluation?: RefEvaluation }): string;\n}\n\nexport class Table implements UserTable {\n public changedAt: Date;\n public lastChangedAt?: Date;\n public minNumRows: number;\n public maxNumRows: number;\n public minNumCols: number;\n public maxNumCols: number;\n public sheetId: number = 0;\n public sheetName: string = '';\n public prevSheetName: string = '';\n public status: 0 | 1 | 2 = 0; // 0: not initialized, 1: initialized, 2: formula absoluted\n public wire: Wire;\n public idsToBeIdentified: Id[] = [];\n\n private version = 0;\n private idMatrix: IdMatrix;\n private area: AreaType = { top: 0, left: 0, bottom: 0, right: 0 };\n private addressCaches: Map<Id, Address> = new Map();\n\n constructor({\n minNumRows = 1,\n maxNumRows = -1,\n minNumCols = 1,\n maxNumCols = -1,\n sheetName,\n hub = createWire({}),\n }: Props) {\n this.idMatrix = [];\n this.changedAt = new Date();\n this.minNumRows = minNumRows || 0;\n this.maxNumRows = maxNumRows || 0;\n this.minNumCols = minNumCols || 0;\n this.maxNumCols = maxNumCols || 0;\n this.sheetName = sheetName || '';\n this.wire = hub;\n }\n\n get headerHeight() {\n return this.getCellByPoint({ y: 0, x: 0 }, 'SYSTEM')?.height || HEADER_HEIGHT;\n }\n\n setHeaderHeight(height: number, historicize = true) {\n return this.update({\n diff: { 0: { height } },\n partial: true,\n historicize,\n });\n }\n\n get headerWidth() {\n return this.getCellByPoint({ y: 0, x: 0 }, 'SYSTEM')?.width || HEADER_WIDTH;\n }\n\n setHeaderWidth(width: number, historicize = true) {\n return this.update({\n diff: { 0: { width } },\n partial: true,\n historicize,\n });\n }\n\n get isInitialized() {\n return this.status === 2;\n }\n\n get functions() {\n return this.wire.functions;\n }\n\n get parsers() {\n return this.wire.parsers;\n }\n\n get renderers() {\n return this.wire.renderers;\n }\n\n get labelers() {\n return this.wire.labelers;\n }\n\n get policies() {\n return this.wire.policies;\n }\n\n public identifyFormula() {\n this.idsToBeIdentified.forEach((id) => {\n const cell = this.wire.data[id];\n if (cell?.system?.sheetId == null) {\n return;\n }\n cell.value = identifyFormula(cell?.value, {\n table: this,\n dependency: id,\n });\n });\n this.idsToBeIdentified = [];\n this.status = 2;\n }\n\n public getSheetId() {\n return this.sheetId;\n }\n\n public getTableBySheetName(sheetName: string) {\n const sheetId = this.wire.sheetIdsByName[sheetName];\n return this.getTableBySheetId(sheetId);\n }\n public getTableBySheetId(sheetId: number) {\n return this.wire.contextsBySheetId[sheetId]?.store?.tableReactive?.current;\n }\n\n public initialize(cells: CellsByAddressType) {\n if (this.status > 1) {\n return;\n }\n if (cells[0] == null) {\n cells[0] = { width: HEADER_WIDTH, height: HEADER_HEIGHT };\n }\n const auto = getMaxSizesFromCells(cells);\n const changedAt = new Date();\n this.area = {\n top: 1,\n left: 1,\n bottom: auto.numRows,\n right: auto.numCols,\n };\n\n // make idMatrix beforehand\n for (let y = 0; y < auto.numRows + 1; y++) {\n const ids: Ids = [];\n this.idMatrix.push(ids);\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.generateId();\n ids.push(id);\n const address = p2a({ y, x });\n this.addressCaches.set(id, address);\n }\n }\n Object.keys(cells).forEach((address) => {\n const range = expandRange(address);\n const data = cells[address];\n range.forEach((address) => {\n const origin = cells[address];\n cells[address] = {\n ...origin,\n ...data,\n style: {\n ...origin?.style,\n ...data?.style,\n },\n prevention: (origin?.prevention || 0) | (data?.prevention || 0),\n };\n });\n });\n\n const common = cells?.['default'];\n for (let y = 0; y < auto.numRows + 1; y++) {\n const rowId = y2r(y);\n const rowDefault = cells?.[rowId];\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.getId({ y, x });\n const address = p2a({ y, x });\n const colId = x2c(x);\n const colDefault = cells?.[colId];\n const cell = cells?.[address];\n const stacked = {\n ...common,\n ...rowDefault,\n ...colDefault,\n ...cell,\n style: {\n ...common?.style,\n ...rowDefault?.style,\n ...colDefault?.style,\n ...cell?.style,\n },\n prevention:\n (common?.prevention || 0) |\n (rowDefault?.prevention || 0) |\n (colDefault?.prevention || 0) |\n (cell?.prevention || 0),\n } as CellType;\n\n if (stacked?.value?.startsWith?.('=')) {\n this.idsToBeIdentified.push(id);\n }\n if (y === 0) {\n if (stacked.width == null) {\n stacked.width = DEFAULT_WIDTH;\n }\n } else if (x === 0) {\n if (stacked.height == null) {\n stacked.height = DEFAULT_HEIGHT;\n }\n } else {\n delete stacked.height;\n delete stacked.width;\n delete stacked.labeler;\n }\n stacked.system = { id, changedAt, dependents: new Set(), sheetId: this.sheetId };\n this.wire.data[id] = stacked;\n }\n }\n this.status = 1; // initialized\n this.wire.sheetIdsByName[this.sheetName] = this.sheetId;\n }\n\n public incrementVersion() {\n this.version++;\n if (this.version >= Number.MAX_SAFE_INTEGER) {\n this.version = 1;\n }\n }\n\n private generateId() {\n return (this.wire.cellHead++).toString(36);\n }\n\n public getRectSize({ top, left, bottom, right }: AreaType) {\n let width = 0,\n height = 0;\n for (let x = left || 1; x < right; x++) {\n width += this.getCellByPoint({ y: 0, x }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n }\n for (let y = top || 1; y < bottom; y++) {\n height += this.getCellByPoint({ y, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n }\n return { width, height };\n }\n\n public getTotalSize() {\n const { bottom, right } = this.area;\n const { width, height } = this.getRectSize({\n top: 1,\n left: 1,\n bottom: bottom + 1,\n right: right + 1,\n });\n return {\n totalWidth: width + this.headerWidth,\n totalHeight: height + this.headerHeight,\n };\n }\n\n public refresh(keepAddressCache = true): Table {\n this.incrementVersion();\n this.lastChangedAt = this.changedAt;\n this.changedAt = new Date();\n\n this.clearSolvedCaches();\n\n if (!keepAddressCache) {\n // force reset\n this.addressCaches.clear();\n }\n return this;\n }\n\n public clone(keepAddressCache = true): Table {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n return copied.refresh(keepAddressCache);\n }\n\n public getPointById(\n id: Id,\n slideY = 0,\n slideX = 0,\n ): PointType & {\n absCol: boolean;\n absRow: boolean;\n } {\n const absCol = id.startsWith('$');\n if (absCol) {\n id = id.slice(1);\n slideX = 0;\n }\n const absRow = id.endsWith('$');\n if (absRow) {\n id = id.slice(0, -1);\n slideY = 0;\n }\n const cache = this.addressCaches.get(id);\n if (cache) {\n const p = a2p(cache);\n return { y: p.y + slideY, x: p.x + slideX, absCol, absRow };\n }\n\n for (let y = 0; y < this.idMatrix.length; y++) {\n const ids = this.idMatrix[y];\n for (let x = 0; x < ids.length; x++) {\n const existing = ids[x];\n const address = p2a({ y, x });\n this.addressCaches.set(existing, address);\n if (existing === id) {\n return {\n y: y + slideY,\n x: x + slideX,\n absCol,\n absRow,\n };\n }\n }\n }\n return { y: -1, x: -1, absCol, absRow };\n }\n\n public getAddressById(id: Id, slideY = 0, slideX = 0): string | undefined {\n const { y, x, absCol, absRow } = this.getPointById(id, slideY, slideX);\n return grantAddressAbsolute(p2a({ y, x }), absCol, absRow);\n }\n\n public getAddressesByIds(ids: CellsByIdType) {\n const addresses: CellsByAddressType = {};\n Object.keys(ids).forEach((id) => {\n const cell = ids[id];\n const address = this.getAddressById(id);\n if (cell && address) {\n addresses[address] = cell;\n }\n });\n return addresses;\n }\n\n public clearAddressCaches() {\n this.addressCaches.clear();\n }\n\n public getId(point: PointType) {\n const { y, x } = point;\n return this.idMatrix[y]?.[x];\n }\n\n public getIdFormula(point: ExtraPointType): { id: Id | null; formula: string | null } {\n const { y, x, absX = false, absY = false } = point;\n const id = this.getId({ y, x });\n if (id == null) {\n return { id: null, formula: null };\n }\n return {\n id,\n formula: `${absX ? '$' : ''}#${id}${absY ? '$' : ''}`,\n };\n }\n\n public getCellByPoint(point: PointType, refEvaluation: RefEvaluation = 'COMPLETE', raise = false) {\n const { y, x } = point;\n if (y === -1 || x === -1) {\n return undefined;\n }\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n return undefined;\n }\n const cell = this.wire.data[id];\n if (cell == null) {\n return undefined;\n }\n const value = solveFormula({\n value: cell.value,\n table: this,\n raise,\n refEvaluation,\n origin: point,\n });\n return { ...cell, value } as CellType;\n }\n\n public getCellByAddress(address: Address, refEvaluation: RefEvaluation = 'COMPLETE', raise = false) {\n const point = a2p(address);\n return this.getCellByPoint(point, refEvaluation, raise);\n }\n\n public getById(id: Id) {\n return this.wire.data[id];\n }\n\n public getNumRows(base = 1) {\n const { top, bottom } = this.area;\n return base + bottom - top;\n }\n\n public getNumCols(base = 1) {\n const { left, right } = this.area;\n return base + right - left;\n }\n\n public get top() {\n return this.area.top;\n }\n public get left() {\n return this.area.left;\n }\n public get bottom() {\n return this.area.bottom;\n }\n public get right() {\n return this.area.right;\n }\n\n getFullRef(ref: Address) {\n if (this.sheetName) {\n return `#${this.sheetName}!${ref}`;\n }\n return ref;\n }\n\n public getFieldMatrix({\n area,\n field = 'value',\n refEvaluation = 'COMPLETE',\n raise = false,\n filter = noFilter,\n }: GetFieldPropsWithArea = {}) {\n const { top, left, bottom, right } = area ?? this.area;\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n matrix[y - top][x - left] = cell[field];\n }\n }\n }\n return matrix;\n }\n\n public getFieldObject({\n area,\n field = 'value',\n refEvaluation = 'COMPLETE',\n raise = false,\n filter = noFilter,\n }: GetFieldPropsWithArea = {}) {\n const result: { [Address: Address]: any } = {};\n const { top, left, bottom, right } = area ?? this.area;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n result[p2a({ y, x })] = cell[field];\n }\n }\n }\n return result;\n }\n\n public getFieldRows({\n field = 'value',\n refEvaluation = 'COMPLETE',\n raise = false,\n filter = noFilter,\n }: GetFieldProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n row[x2c(x)] = cell[field];\n }\n }\n }\n return result;\n }\n\n public getFieldCols({\n field = 'value',\n refEvaluation = 'COMPLETE',\n raise = false,\n filter = noFilter,\n }: GetFieldProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n col[y2r(y)] = cell[field];\n }\n }\n }\n return result;\n }\n\n public getMatrix({\n area,\n refEvaluation = 'SYSTEM',\n raise = false,\n filter = noFilter,\n }: GetPropsWithArea = {}): (CellType | null)[][] {\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n matrix[y - top][x - left] = cell;\n }\n }\n }\n return matrix;\n }\n public getObject({ refEvaluation = 'SYSTEM', area, raise = false, filter = noFilter }: GetPropsWithArea = {}) {\n const result: CellsByAddressType = {};\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n result[p2a({ y, x })] = cell;\n }\n }\n }\n return result;\n }\n public getRows({ refEvaluation = 'COMPLETE', raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y: y - top, x: x - left }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n row[x2c(x)] = cell;\n }\n }\n }\n return result;\n }\n public getCols({ refEvaluation = 'COMPLETE', raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getCellByPoint({ y: y - top, x: x - left }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n col[y2r(y)] = cell;\n }\n }\n }\n return result;\n }\n\n private pushHistory(history: HistoryType) {\n const hub = this.wire;\n const strayedHistories = hub.histories.splice(hub.historyIndex + 1, hub.histories.length);\n strayedHistories.forEach(this.cleanStrayed.bind(this));\n hub.histories.push(history);\n hub.lastHistory = hub.currentHistory = history;\n if (hub.histories.length > hub.historyLimit) {\n const kickedOut = hub.histories.splice(0, 1)[0];\n this.cleanObsolete(kickedOut);\n } else {\n hub.historyIndex++;\n }\n }\n\n private cleanObsolete(history: HistoryType) {\n if (history.operation === 'REMOVE_ROWS' || history.operation === 'REMOVE_COLS') {\n history.deleted.forEach((ids) => {\n ids.forEach((id) => {\n delete this.wire.data[id];\n });\n });\n }\n if (history.operation === 'MOVE') {\n Object.keys(history.lostRows).forEach((address) => {\n const idMatrix = history.lostRows[address];\n idMatrix.map((ids) =>\n ids.forEach((id) => {\n if (id != null) {\n delete this.wire.data[id];\n }\n }),\n );\n });\n }\n }\n\n private cleanStrayed(history: HistoryType) {\n if (history.operation === 'INSERT_ROWS' || history.operation === 'INSERT_COLS') {\n history.idMatrix.forEach((ids) => {\n ids.forEach((id) => {\n delete this.wire.data[id];\n });\n });\n }\n }\n\n private getNewIdMatrix(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n ids.push(this.generateId());\n }\n }\n return matrix;\n }\n\n private getIdMatrixFromArea(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n continue;\n }\n ids.push(id);\n }\n }\n return matrix;\n }\n\n private setChangedAt(cell?: CellType, changedAt?: Date) {\n if (cell?.system == null) {\n return null;\n }\n cell.system!.changedAt = changedAt ?? new Date();\n return cell;\n }\n\n private getUpdatedArea(diff: CellsByAddressType): AreaType {\n let minY = Infinity;\n let minX = Infinity;\n let maxY = -Infinity;\n let maxX = -Infinity;\n\n Object.keys(diff).forEach((address) => {\n const point = a2p(address);\n minY = Math.min(minY, point.y);\n minX = Math.min(minX, point.x);\n maxY = Math.max(maxY, point.y);\n maxX = Math.max(maxX, point.x);\n });\n\n return {\n top: minY,\n left: minX,\n bottom: maxY,\n right: maxX,\n };\n }\n\n private copyCellLayout(cell: CellType | undefined) {\n if (cell == null) {\n return undefined;\n }\n const newCell: CellType = {};\n if (cell.style != null) {\n newCell.style = cell.style;\n }\n if (cell.justifyContent != null) {\n newCell.justifyContent = cell.justifyContent;\n }\n if (cell.alignItems != null) {\n newCell.alignItems = cell.alignItems;\n }\n if (cell.renderer != null) {\n newCell.renderer = cell.renderer;\n }\n if (cell.parser != null) {\n newCell.parser = cell.parser;\n }\n if (cell.width != null) {\n newCell.width = cell.width;\n }\n if (cell.height != null) {\n newCell.height = cell.height;\n }\n if (cell.labeler != null) {\n newCell.labeler = cell.labeler;\n }\n return newCell;\n }\n\n public move({\n srcTable = this,\n src,\n dst,\n historicize = true,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: MoveProps) {\n const matrixNew = this.getNewIdMatrix(src);\n const matrixFrom = srcTable.__raw__.getIdMatrixFromArea(src);\n const matrixTo = this.getIdMatrixFromArea(dst);\n\n const diffBefore: CellsByIdType = {};\n const preserver = new ReferencePreserver(this);\n\n // to dst(to)\n const lostRows = putMatrix(this.idMatrix, matrixFrom, dst, ({ srcValue: srcId, dstValue: dstId }) => {\n if (srcId == null || dstId == null) {\n return false;\n }\n preserver.map[dstId] = srcId;\n preserver.addTheDependents(srcId, dstId);\n\n const srcCell = this.wire.data[srcId];\n const dstCell = this.wire.data[dstId];\n if (\n operator === 'USER' &&\n (operation.hasOperation(srcCell?.prevention, operation.MoveFrom) ||\n operation.hasOperation(dstCell?.prevention, operation.MoveTo))\n ) {\n return false;\n }\n const policy = this.policies[dstCell?.policy!] ?? defaultPolicy;\n const patch = policy.restrict({\n table: this,\n point: this.getPointById(dstId),\n patch: srcCell,\n original: dstCell,\n operation: operation.MoveTo,\n });\n if (patch) {\n diffBefore[srcId] = { ...srcCell };\n this.wire.data[srcId] = {\n ...srcCell,\n ...patch,\n system: {\n id: srcId,\n sheetId: this.sheetId,\n changedAt: new Date(),\n dependents: srcCell?.system?.dependents ?? new Set(),\n },\n };\n }\n if (srcCell != null) {\n this.setChangedAt(srcCell, new Date());\n }\n return true;\n });\n\n const srcTableRaw = srcTable.__raw__;\n const srcContext = this.wire.contextsBySheetId[srcTableRaw.sheetId];\n // to src(from)\n putMatrix(srcTableRaw.idMatrix, matrixNew, src, ({ srcValue: newId, dstValue: srcId, dstPoint: srcPoint }) => {\n // if the srcPoint is in the dst(Area), we do not need to rewrite\n if (among(dst, srcPoint) && srcTable === this) {\n return false;\n }\n preserver.map[srcId] = newId;\n const srcCell = srcTableRaw.wire.data[srcId];\n if (operator === 'USER' && operation.hasOperation(srcCell?.prevention, operation.MoveFrom)) {\n return false;\n }\n const policy = this.policies[srcCell?.policy!] ?? defaultPolicy;\n const patch = policy.restrict({\n table: srcTableRaw,\n point: srcTableRaw.getPointById(srcId),\n patch: undefined,\n original: srcCell,\n operation: operation.MoveFrom,\n });\n srcTableRaw.wire.data[newId] = {\n value: null,\n ...patch,\n system: {\n id: newId,\n sheetId: srcTableRaw.sheetId,\n changedAt: new Date(),\n dependents: srcCell?.system?.dependents ?? new Set(),\n },\n };\n return true;\n });\n\n const resolvedDiff = preserver.resolveDependents();\n Object.assign(diffBefore, resolvedDiff);\n if (srcTable !== this && srcContext !== null) {\n const { dispatch } = srcContext;\n requestAnimationFrame(() => {\n dispatch(updateTable(srcTableRaw));\n });\n }\n\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'MOVE',\n srcSheetId: srcTableRaw.sheetId,\n dstSheetId: this.sheetId,\n undoReflection,\n redoReflection,\n diffBefore,\n diffAfter: {},\n src,\n dst,\n matrixFrom,\n matrixTo,\n matrixNew,\n lostRows,\n });\n }\n\n // Call onEdit with cloned tables containing moved areas\n if (this.wire.onEdit) {\n // Clone srcTable with from area\n this.wire.onEdit({ table: srcTable.__raw__.trim(src) });\n this.wire.onEdit({ table: this.__raw__.trim(dst) });\n }\n\n return this.refresh(false);\n }\n\n public copy({\n srcTable = this,\n src,\n dst,\n onlyValue = false,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: MoveProps & { onlyValue?: boolean }) {\n const isXSheet = srcTable !== this;\n const { height: maxHeight, width: maxWidth } = areaShape({ ...src, base: 1 });\n const { top: topFrom, left: leftFrom } = src;\n const { top: topTo, left: leftTo, bottom: bottomTo, right: rightTo } = dst;\n const diff: CellsByAddressType = {};\n const changedAt = new Date();\n\n for (let i = 0; i <= bottomTo - topTo; i++) {\n const toY = topTo + i;\n if (toY > this.getNumRows()) {\n continue;\n }\n for (let j = 0; j <= rightTo - leftTo; j++) {\n const toX = leftTo + j;\n if (toX > this.getNumCols()) {\n continue;\n }\n const fromY = topFrom + (i % maxHeight);\n const fromX = leftFrom + (j % maxWidth);\n const slideY = isXSheet ? 0 : toY - fromY;\n const slideX = isXSheet ? 0 : toX - fromX;\n const cell: CellType = {\n ...srcTable.getCellByPoint(\n {\n y: topFrom + (i % maxHeight),\n x: leftFrom + (j % maxWidth),\n },\n 'SYSTEM',\n ),\n };\n const dstPoint = { y: toY, x: toX };\n const value = identifyFormula(cell?.value, {\n table: this,\n dependency: this.getId(dstPoint),\n slideY,\n slideX,\n });\n this.setChangedAt(cell, changedAt);\n const address = p2a(dstPoint);\n if (onlyValue) {\n const dstCell = this.getCellByPoint(dstPoint, 'SYSTEM');\n cell.style = dstCell?.style;\n cell.justifyContent = dstCell?.justifyContent;\n cell.alignItems = dstCell?.alignItems;\n }\n diff[address] = { ...cell, value };\n }\n }\n return this.update({\n diff,\n partial: false,\n operator,\n operation: operation.Copy,\n undoReflection,\n redoReflection,\n });\n }\n\n public getPolicyByPoint(point: PointType): PolicyType {\n const cell = this.getCellByPoint(point, 'SYSTEM');\n if (cell?.policy == null) {\n return defaultPolicy;\n }\n return this.policies[cell.policy] ?? defaultPolicy;\n }\n\n private _update({\n diff,\n partial = true,\n updateChangedAt = true,\n ignoreFields = ['labeler'],\n operator = 'SYSTEM',\n operation: op = operation.Update,\n formulaIdentify = true,\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n ignoreFields?: (keyof CellType)[];\n operator?: OperatorType;\n operation?: OperationType;\n formulaIdentify?: boolean;\n }) {\n const diffBefore: CellsByIdType = {};\n const diffAfter: CellsByIdType = {};\n const changedAt = new Date();\n\n Object.keys(diff).forEach((address) => {\n const point = a2p(address);\n const id = this.getId(point);\n const original = this.wire.data[id]!;\n let patch: Record<string, any> = { ...diff[address] };\n if (operator === 'USER' && operation.hasOperation(original.prevention, operation.Update)) {\n return;\n }\n\n if (formulaIdentify) {\n patch.value = identifyFormula(patch.value, {\n table: this,\n dependency: id,\n });\n }\n ignoreFields.forEach((key) => {\n patch[key] = original?.[key];\n });\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.Write)) {\n delete patch.value;\n }\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.Style)) {\n delete patch?.style?.justifyContent;\n delete patch?.style?.alignItems;\n }\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.Resize)) {\n delete patch?.style?.width;\n delete patch?.style?.height;\n }\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.SetRenderer)) {\n delete patch?.renderer;\n }\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.SetParser)) {\n delete patch?.parser;\n }\n if (updateChangedAt) {\n this.setChangedAt(patch, changedAt);\n }\n // must not partial\n diffBefore[id] = { ...original };\n\n const policy = this.policies[original.policy!] ?? defaultPolicy;\n const p = policy.restrict({\n table: this,\n point,\n patch,\n original,\n operation: op,\n });\n patch = { ...p, system: { ...original.system!, changedAt } };\n if (partial) {\n diffAfter[id] = this.wire.data[id] = { ...original, ...patch };\n } else {\n diffAfter[id] = this.wire.data[id] = patch;\n }\n });\n\n // Call onEdit with cloned table containing updated area\n if (this.wire.onEdit && Object.keys(diff).length > 0) {\n const updatedArea = this.getUpdatedArea(diff);\n this.wire.onEdit({ table: this.__raw__.trim(updatedArea) });\n }\n\n //this.clearSolvedCaches();\n return {\n diffBefore,\n diffAfter,\n };\n }\n\n public update({\n diff,\n partial = true,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n operation: op = operation.Update,\n undoReflection,\n redoReflection,\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n operation?: OperationType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n const { diffBefore, diffAfter } = this._update({\n diff,\n partial,\n operator,\n operation: op,\n updateChangedAt,\n });\n\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'UPDATE',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection,\n redoReflection,\n diffBefore,\n diffAfter,\n partial,\n });\n }\n return this.refresh(true);\n }\n\n public writeRawCellMatrix({\n point,\n matrix,\n updateChangedAt = true,\n historicize = true,\n onlyValue = false,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n point: PointType;\n matrix: MatrixType<RawCellType>;\n updateChangedAt?: boolean;\n historicize?: boolean;\n onlyValue?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n const { y: baseY, x: baseX } = point;\n const diff: CellsByAddressType = {};\n matrix.forEach((cells, i) => {\n const y = baseY + i;\n if (y > this.bottom) {\n return;\n }\n cells.forEach((newCell, j) => {\n const x = baseX + j;\n if (x > this.right) {\n return;\n }\n\n const point = { y, x };\n const parsed = this.parse(point, newCell.value ?? '');\n parsed.style = { ...newCell.style, ...parsed.style };\n if (onlyValue) {\n const currentCell = this.getCellByPoint(point, 'SYSTEM');\n parsed.style = currentCell?.style;\n parsed.justifyContent = currentCell?.justifyContent;\n parsed.alignItems = currentCell?.alignItems;\n }\n diff[p2a(point)] = parsed;\n });\n });\n return this.update({\n diff,\n partial: true,\n updateChangedAt,\n historicize,\n operator,\n operation: operation.Write,\n undoReflection,\n redoReflection,\n });\n }\n\n public writeMatrix(props: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n const matrixWithStyle: MatrixType<RawCellType> = props.matrix.map((row) => row.map((value) => ({ value })));\n return this.writeRawCellMatrix({ ...props, matrix: matrixWithStyle });\n }\n\n public write(props: {\n point: PointType;\n value: string;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n const { point, value } = props;\n const parsed = this.parse(point, value ?? '');\n const current = this.getCellByPoint(point, 'RAW');\n if (current?.value === parsed.value) {\n // no change\n return this;\n }\n const diff = { [p2a(point)]: parsed };\n return this.update({\n ...props,\n diff,\n partial: true,\n operation: operation.Write,\n });\n }\n\n public insertRows({\n y,\n numRows,\n baseY,\n diff,\n partial,\n updateChangedAt,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n y: number;\n numRows: number;\n baseY: number;\n diff?: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n if (this.maxNumRows !== -1 && this.getNumRows() + numRows > this.maxNumRows) {\n console.error(`Rows are limited to ${this.maxNumRows}.`);\n return this;\n }\n const numCols = this.getNumCols(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i < numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getCellByPoint({ y: baseY, x: j }, 'SYSTEM');\n const copied = this.copyCellLayout(cell);\n this.wire.data[id] = {\n ...copied,\n system: {\n id,\n sheetId: this.sheetId,\n changedAt,\n dependents: new Set(),\n },\n };\n }\n rows.push(row);\n }\n this.idMatrix.splice(y, 0, ...rows);\n this.area.bottom += numRows;\n\n this.pushHistory({\n applyed: true,\n operation: 'INSERT_ROWS',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection,\n redoReflection,\n y,\n numRows,\n idMatrix: rows,\n });\n\n // If diff is provided, update the cells after insertion\n if (diff) {\n Object.assign(this.wire.lastHistory!, this._update({ diff, partial, updateChangedAt, operator }), { partial });\n }\n if (this.wire.onInsertRows) {\n const cloned = this.clone();\n cloned.area = {\n top: y,\n bottom: y + numRows - 1,\n left: this.area.left,\n right: this.area.right,\n };\n cloned.addressCaches = new Map();\n this.wire.onInsertRows({ table: cloned, y, numRows });\n }\n\n return this.refresh(false);\n }\n public removeRows({\n y,\n numRows,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n y: number;\n numRows: number;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n if (this.minNumRows !== -1 && this.getNumRows() - numRows < this.minNumRows) {\n console.error(`At least ${this.minNumRows} row(s) are required.`);\n return this;\n }\n\n const preserver = new ReferencePreserver(this);\n const ys: number[] = [];\n const backup = this.idMatrix.map((ids) => [...ids]); // backup before deletion\n\n for (let yi = y; yi < y + numRows; yi++) {\n const cell = this.getCellByPoint({ y: yi, x: 0 }, 'SYSTEM');\n if (operator === 'USER' && operation.hasOperation(cell?.prevention, operation.RemoveRows)) {\n console.warn(`Cannot delete row ${yi}.`);\n return this;\n }\n for (let xi = 1; xi <= this.getNumCols(); xi++) {\n const id = this.getId({ y: yi, x: xi });\n if (id == null) {\n continue;\n }\n preserver.addTheDependents(id);\n preserver.map[id] = this.getId({ y: yi + numRows, x: xi });\n }\n ys.unshift(yi);\n }\n const deleted: MatrixType = [];\n ys.forEach((y) => {\n const row = this.idMatrix.splice(y, 1);\n deleted.unshift(row[0]);\n });\n this.area.bottom -= ys.length;\n\n const diffBefore = preserver.resolveDependents('removeRows');\n\n this.pushHistory({\n applyed: true,\n operation: 'REMOVE_ROWS',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection,\n redoReflection,\n ys: ys.reverse(),\n diffBefore,\n deleted,\n });\n\n if (this.wire.onRemoveRows) {\n const cloned = this.clone();\n cloned.idMatrix = backup;\n cloned.area = {\n top: y,\n bottom: y + numRows - 1,\n left: this.area.left,\n right: this.area.right,\n };\n cloned.addressCaches = new Map();\n this.wire.onRemoveRows({ table: cloned, ys: ys.reverse() });\n }\n\n return this.refresh(false);\n }\n\n public insertCols({\n x,\n numCols,\n baseX,\n diff,\n partial,\n updateChangedAt,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n x: number;\n numCols: number;\n baseX: number;\n diff?: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n if (this.maxNumCols !== -1 && this.getNumCols() + numCols > this.maxNumCols) {\n console.error(`Columns are limited to ${this.maxNumCols}.`);\n return this;\n }\n const numRows = this.getNumRows(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i <= numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getCellByPoint({ y: i, x: baseX }, 'SYSTEM');\n const copied = this.copyCellLayout(cell);\n this.idMatrix[i].splice(x, 0, id);\n this.wire.data[id] = {\n ...copied,\n system: {\n id,\n sheetId: this.sheetId,\n changedAt,\n dependents: new Set(),\n },\n };\n }\n rows.push(row);\n }\n this.area.right += numCols;\n\n this.pushHistory({\n applyed: true,\n operation: 'INSERT_COLS',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection: undoReflection,\n redoReflection: redoReflection,\n x,\n numCols,\n idMatrix: rows,\n });\n\n // If diff is provided, update the cells after insertion\n if (diff) {\n Object.assign(this.wire.lastHistory!, this._update({ diff, partial, updateChangedAt, operator }), { partial });\n }\n if (this.wire.onInsertCols) {\n const cloned = this.clone();\n cloned.area = {\n top: this.area.top,\n bottom: this.area.bottom,\n left: x,\n right: x + numCols - 1,\n };\n cloned.addressCaches = new Map();\n this.wire.onInsertCols({ table: cloned, x, numCols });\n }\n return this.refresh(false);\n }\n public removeCols({\n x,\n numCols,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n x: number;\n numCols: number;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n if (this.minNumCols !== -1 && this.getNumCols() - numCols < this.minNumCols) {\n console.error(`At least ${this.minNumCols} column(s) are required.`);\n return this;\n }\n\n const preserver = new ReferencePreserver(this);\n const xs: number[] = [];\n const backup = this.idMatrix.map((ids) => [...ids]); // backup before deletion\n\n for (let xi = x; xi < x + numCols; xi++) {\n const cell = this.getCellByPoint({ y: 0, x: xi }, 'SYSTEM');\n if (operator === 'USER' && operation.hasOperation(cell?.prevention, operation.RemoveCols)) {\n console.warn(`Cannot delete col ${xi}.`);\n continue;\n }\n for (let yi = 1; yi <= this.getNumRows(); yi++) {\n const id = this.getId({ y: yi, x: xi });\n if (id == null) {\n continue;\n }\n preserver.addTheDependents(id);\n preserver.map[id] = this.getId({ y: yi, x: xi + numCols });\n }\n xs.unshift(xi);\n }\n\n const deleted: MatrixType = [];\n this.idMatrix.forEach((row) => {\n const deleting: Ids = [];\n deleted.push(deleting);\n // reverse and delete\n xs.forEach((x) => {\n deleting.unshift(...row.splice(x, 1));\n });\n });\n this.area.right -= xs.length;\n const diffBefore = preserver.resolveDependents('removeCols');\n\n this.pushHistory({\n applyed: true,\n operation: 'REMOVE_COLS',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection: undoReflection,\n redoReflection: redoReflection,\n xs: xs.reverse(),\n diffBefore,\n deleted,\n });\n\n if (this.wire.onRemoveCols) {\n const cloned = this.clone();\n cloned.idMatrix = backup;\n cloned.area = {\n top: this.area.top,\n bottom: this.area.bottom,\n left: x,\n right: x + numCols - 1,\n };\n cloned.addressCaches = new Map();\n this.wire.onRemoveCols({ table: cloned, xs: xs.reverse() });\n }\n return this.refresh(false);\n }\n public getHistories() {\n return [...this.wire.histories];\n }\n public getHistoryIndex() {\n return this.wire.historyIndex;\n }\n public getHistorySize() {\n return this.wire.histories.length;\n }\n public getHistoryLimit() {\n return this.wire.historyLimit;\n }\n\n public getArea(): AreaType {\n return { ...this.area };\n }\n\n public parse(point: PointType, value: string) {\n const cell = this.getCellByPoint(point, 'SYSTEM') ?? {};\n const parser = this.parsers[cell.parser ?? ''] ?? defaultParser;\n return parser.call(value, cell);\n }\n\n public render(props: RendererCallProps) {\n const { point, sync } = props;\n const cell = this.getCellByPoint(point, 'SYSTEM') ?? {};\n const renderer = this.renderers[cell.renderer ?? ''] ?? defaultRenderer;\n return renderer.call({ table: this, point, sync });\n }\n\n public stringify({\n point,\n cell,\n refEvaluation = 'COMPLETE',\n }: {\n point: PointType;\n cell?: CellType;\n refEvaluation?: RefEvaluation;\n }) {\n if (cell == null) {\n cell = this.getCellByPoint(point, refEvaluation, true);\n }\n if (cell == null) {\n return '';\n }\n const renderer = this.renderers[cell?.renderer ?? ''] ?? defaultRenderer;\n const s = renderer.stringify({ value: cell.value, cell, table: this, point });\n\n if (s[0] === '=') {\n if (refEvaluation === 'SYSTEM') {\n return s; // do not evaluate system references\n }\n if (refEvaluation === 'RAW') {\n const lexer = new Lexer(s.substring(1));\n lexer.tokenize();\n return '=' + lexer.display({ table: this });\n }\n const solved = solveFormula({ value: s, table: this, raise: false, refEvaluation, origin: point });\n const value = stripTable({ value: solved, raise: false });\n return renderer.stringify({ value, cell, table: this, point });\n }\n return s;\n }\n\n public trim(area: AreaType): Table {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n copied.area = area;\n // this causes RangeError on circular reference(maximum call stack size exceeded)\n // copied.solvedCaches = {};\n return copied;\n }\n\n private applyDiff(diff: CellsByIdType = {}, partial = true) {\n if (!partial) {\n //Object.assign(this.wire.data, diff);\n Object.keys(diff).forEach((id) => {\n const cell = diff[id] ?? {};\n this.setChangedAt(cell);\n this.wire.data[id] = { ...cell };\n });\n return;\n }\n Object.keys(diff).map((id) => {\n const cell = diff[id] ?? {};\n this.setChangedAt(cell);\n this.wire.data[id] = { ...this.getById(id), ...cell };\n });\n }\n\n public undo() {\n if (this.wire.historyIndex < 0) {\n return { history: null, newTable: this.__raw__ };\n }\n const history = this.wire.histories[this.wire.historyIndex--];\n history.applyed = false;\n this.wire.currentHistory = this.wire.histories[this.wire.historyIndex];\n\n const srcTable = this.getTableBySheetId(history.srcSheetId);\n const dstTable = this.getTableBySheetId(history.dstSheetId);\n\n if (!dstTable) {\n return { history: null, newTable: this.__raw__ };\n }\n\n switch (history.operation) {\n case 'UPDATE':\n dstTable.applyDiff(history.diffBefore, false);\n break;\n case 'INSERT_ROWS': {\n if (history.diffBefore) {\n dstTable.applyDiff(history.diffBefore, history.partial);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n dstTable.idMatrix.splice(history.y, height);\n dstTable.area.bottom -= height;\n break;\n }\n case 'INSERT_COLS': {\n if (history.diffBefore) {\n dstTable.applyDiff(history.diffBefore, false);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n dstTable.idMatrix.forEach((row) => {\n row.splice(history.x, width);\n });\n dstTable.area.right -= width;\n break;\n }\n case 'REMOVE_ROWS': {\n const { ys, deleted } = history;\n ys.forEach((y, i) => {\n dstTable.idMatrix.splice(y, 0, deleted[i]);\n });\n dstTable.area.bottom += ys.length;\n this.applyDiff(history.diffBefore, false);\n break;\n }\n case 'REMOVE_COLS': {\n const { xs, deleted } = history;\n dstTable.idMatrix.forEach((row, i) => {\n for (let j = 0; j < xs.length; j++) {\n row.splice(xs[j], 0, deleted[i][j]);\n }\n });\n dstTable.area.right += xs.length;\n this.applyDiff(history.diffBefore, false);\n break;\n }\n case 'MOVE': {\n const { top: yFrom, left: xFrom } = history.src;\n const { top: yTo, left: xTo } = history.dst;\n const { height: rows, width: cols } = matrixShape({\n matrix: history.matrixFrom,\n base: -1,\n });\n if (srcTable) {\n putMatrix(srcTable.idMatrix, history.matrixFrom, {\n top: yFrom,\n left: xFrom,\n bottom: yFrom + rows,\n right: xFrom + cols,\n });\n }\n putMatrix(dstTable.idMatrix, history.matrixTo, {\n top: yTo,\n left: xTo,\n bottom: yTo + rows,\n right: xTo + cols,\n });\n // Restore original cell states\n dstTable.applyDiff(history.diffBefore, false);\n // Restore original formulas\n if (history.diffAfter) {\n dstTable.applyDiff(history.diffAfter, false);\n }\n break;\n }\n }\n this.refresh(!shouldTracking(history.operation));\n return {\n history,\n callback: ({ tableReactive: tableRef }: StoreType) => {\n tableRef.current?.wire.transmit(history.undoReflection?.transmit);\n },\n };\n }\n\n public redo() {\n if (this.wire.historyIndex + 1 >= this.wire.histories.length) {\n return { history: null, newTable: this.__raw__ };\n }\n const history = this.wire.histories[++this.wire.historyIndex];\n history.applyed = true;\n this.wire.currentHistory = history;\n\n const srcTable = this.getTableBySheetId(history.srcSheetId);\n const dstTable = this.getTableBySheetId(history.dstSheetId);\n\n if (!dstTable) {\n return { history: null, newTable: this.__raw__ };\n }\n\n switch (history.operation) {\n case 'UPDATE':\n dstTable.applyDiff(history.diffAfter, history.partial);\n break;\n case 'INSERT_ROWS': {\n if (history.diffAfter) {\n dstTable.applyDiff(history.diffAfter, history.partial);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n dstTable.idMatrix.splice(history.y, 0, ...history.idMatrix);\n dstTable.area.bottom += height;\n break;\n }\n case 'INSERT_COLS': {\n if (history.diffAfter) {\n dstTable.applyDiff(history.diffAfter, history.partial);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n dstTable.idMatrix.map((row, i) => {\n row.splice(history.x, 0, ...history.idMatrix[i]);\n });\n dstTable.area.right += width;\n break;\n }\n case 'REMOVE_ROWS': {\n dstTable.removeRows({\n y: history.ys[0],\n numRows: history.ys.length,\n operator: 'SYSTEM',\n undoReflection: history.undoReflection,\n redoReflection: history.redoReflection,\n });\n break;\n }\n case 'REMOVE_COLS': {\n dstTable.removeCols({\n x: history.xs[0],\n numCols: history.xs.length,\n operator: 'SYSTEM',\n undoReflection: history.undoReflection,\n redoReflection: history.redoReflection,\n });\n break;\n }\n case 'MOVE': {\n const { src, dst } = history;\n if (srcTable) {\n dstTable.move({ srcTable, src, dst, operator: 'USER', historicize: false });\n }\n }\n }\n this.refresh(!shouldTracking(history.operation));\n return {\n history,\n callback: ({ tableReactive: tableRef }: StoreType) => {\n tableRef.current?.wire.transmit(history.redoReflection?.transmit);\n },\n };\n }\n public getFunction(name: string) {\n return this.functions[name];\n }\n\n public getLabel(key: string | undefined, n: number) {\n if (key == null) {\n return null;\n }\n const labeler = this.labelers[key];\n return labeler?.(n);\n }\n public getBase() {\n return this;\n }\n\n public getSolvedCache(point: PointType) {\n const id = this.getId(point);\n return this.wire.solvedCaches.get(id);\n }\n public setSolvedCache(point: PointType, value: any) {\n const id = this.getId(point);\n this.wire.solvedCaches.set(id, value);\n }\n public clearSolvedCaches() {\n this.wire.solvedCaches.clear();\n }\n public sheetPrefix(omit = false) {\n if (omit) {\n return '';\n }\n return getSheetPrefix(this.sheetName);\n }\n public rangeToArea(range: string) {\n const cells = range.split(':');\n let [start, end] = cells;\n if (start.match(/[a-zA-Z]$/)) {\n start += '1';\n }\n if (start.match(/^[1-9]/)) {\n start = `A${start}`;\n }\n if (end?.match(/[a-zA-Z]$/)) {\n end += this.bottom;\n }\n if (end?.match(/^[1-9]/)) {\n end = `${x2c(this.right)}${end}`;\n }\n const { y: top, x: left } = a2p(start);\n const { y: bottom, x: right } = a2p(end || start);\n return {\n top: Math.abs(top),\n left: Math.abs(left),\n bottom: Math.abs(bottom),\n right: Math.abs(right),\n };\n }\n\n get __raw__(): Table {\n return this;\n }\n}\n","export const isTouching = (e: React.TouchEvent | React.MouseEvent): boolean => {\n if (e.type.startsWith('touch')) {\n return (e as React.TouchEvent).touches.length > 0;\n }\n if (e.type.startsWith('mouse')) {\n const mouseEvent = e as React.MouseEvent;\n // left click only\n return !!(mouseEvent.buttons & 1) && mouseEvent.button === 0;\n }\n return false;\n};\n\n/**\n * Safely call preventDefault to avoid errors on touch events\n */\nexport const safePreventDefault = (e: React.MouseEvent | React.TouchEvent): void => {\n if (!e.type.startsWith('touch')) {\n e.preventDefault();\n }\n};\n","import { useContext, useRef, useCallback, useEffect, memo, useMemo } from 'react';\nimport { x2c, y2r } from '../lib/converters';\nimport { zoneToArea, among, areaToRange } from '../lib/structs';\nimport {\n choose,\n select,\n drag,\n write,\n setEditorRect,\n setContextMenuPosition,\n setAutofillDraggingTo,\n setEditingAddress,\n setDragging,\n submitAutofill,\n setStore,\n} from '../store/actions';\n\nimport { Context } from '../store';\nimport { FormulaError } from '../formula/evaluator';\nimport { insertRef, isRefInsertable } from '../lib/input';\nimport { isXSheetFocused } from '../store/helpers';\nimport type { CSSProperties, FC, RefObject } from 'react';\nimport { isTouching, safePreventDefault } from '../lib/events';\nimport type { UserTable } from '../lib/table';\n\ntype Props = {\n y: number;\n x: number;\n operationStyle?: CSSProperties;\n};\n\nexport const Cell: FC<Props> = memo(({ y, x, operationStyle }) => {\n const rowId = y2r(y);\n const colId = x2c(x);\n const address = `${colId}${rowId}`;\n const { store, dispatch } = useContext(Context);\n const isFirstPointed = useRef(true);\n\n const cellRef = useRef<HTMLTableCellElement>(null);\n const {\n tableReactive: tableRef,\n editingAddress,\n choosing,\n selectingZone,\n leftHeaderSelecting,\n topHeaderSelecting,\n editorRef,\n showAddress,\n autofillDraggingTo,\n contextMenuItems,\n } = store;\n const table = tableRef.current;\n\n // Whether the focus is on another sheet\n const xSheetFocused = isXSheetFocused(store);\n\n const lastFocused = table?.wire.lastFocused;\n\n const selectingArea = zoneToArea(selectingZone); // (top, left) -> (bottom, right)\n\n const editing = editingAddress === address;\n const pointed = choosing.y === y && choosing.x === x;\n const _setEditorRect = useCallback(() => {\n const rect = cellRef.current?.getBoundingClientRect();\n if (rect == null) {\n return null;\n }\n dispatch(\n setEditorRect({\n y: rect.y,\n x: rect.x,\n height: rect.height,\n width: rect.width,\n }),\n );\n }, []);\n\n useEffect(() => {\n // Avoid setting coordinates on the initial render to account for shifts caused by redrawing due to virtualization.\n if (pointed && !isFirstPointed.current) {\n _setEditorRect();\n return;\n }\n isFirstPointed.current = false;\n }, [pointed, editing]);\n\n if (!table) {\n return null;\n }\n\n const cell = table.getCellByPoint({ y, x }, 'SYSTEM');\n const writeCell = useCallback((value: string) => {\n dispatch(write({ value }));\n }, []);\n\n const sync = useCallback((table: UserTable) => {\n dispatch(setStore({ tableReactive: { current: table.__raw__ } }));\n }, []);\n\n let errorMessage = '';\n let rendered: any;\n try {\n rendered = table.render({ table, point: { y, x }, sync });\n } catch (e: any) {\n if (e instanceof FormulaError) {\n errorMessage = e.message;\n rendered = e.code;\n } else {\n errorMessage = e.message;\n rendered = '#UNKNOWN';\n console.error(e);\n }\n // TODO: debug flag\n }\n const input = editorRef.current;\n\n const editingAnywhere = !!(table.wire.editingAddress || editingAddress);\n\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n safePreventDefault(e);\n\n if (!isTouching(e)) {\n return false;\n }\n if (!input) {\n return false;\n }\n\n // Single cell selection only for touch events\n if (e.type.startsWith('touch')) {\n // Blur the input field to commit current value when selecting via touch\n if (editingAnywhere && input) {\n input.blur();\n }\n dispatch(choose({ y, x }));\n dispatch(select({ startY: y, startX: x, endY: y, endX: x }));\n return true;\n }\n\n // Normal drag operation for mouse events\n if (e.shiftKey) {\n dispatch(drag({ y, x }));\n } else {\n dispatch(select({ startY: y, startX: x, endY: -1, endX: -1 }));\n }\n\n dispatch(setDragging(true));\n const fullAddress = `${table.sheetPrefix(!xSheetFocused)}${address}`;\n if (editingAnywhere) {\n const inserted = insertRef({ input: lastFocused || null, ref: fullAddress });\n if (inserted) {\n return false;\n }\n }\n\n table.wire.lastFocused = input;\n input.focus();\n dispatch(setEditingAddress(''));\n\n if (autofillDraggingTo) {\n return false;\n }\n\n if (editingAnywhere) {\n writeCell(input.value);\n }\n if (!e.shiftKey) {\n dispatch(choose({ y, x }));\n }\n return true;\n },\n [editingAnywhere, input, address, xSheetFocused, lastFocused, autofillDraggingTo, writeCell],\n );\n\n const handleDragEnd = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n if (e.type.startsWith('touch')) {\n return;\n }\n\n safePreventDefault(e);\n dispatch(setDragging(false));\n if (autofillDraggingTo) {\n dispatch(submitAutofill(autofillDraggingTo));\n input?.focus();\n return false;\n }\n if (editingAnywhere) {\n dispatch(drag({ y: -1, x: -1 }));\n }\n },\n [autofillDraggingTo, editingAnywhere, input],\n );\n\n const handleDragging = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n if (!isTouching(e)) {\n return false;\n }\n\n // Do nothing for touch events\n if (e.type.startsWith('touch')) {\n return false;\n }\n\n safePreventDefault(e);\n e.stopPropagation();\n\n if (autofillDraggingTo) {\n dispatch(setAutofillDraggingTo({ x, y }));\n return false;\n }\n if (leftHeaderSelecting) {\n dispatch(drag({ y, x: table.getNumCols() }));\n return false;\n }\n if (topHeaderSelecting) {\n dispatch(drag({ y: table.getNumRows(), x }));\n return false;\n }\n if (editingAnywhere && !isRefInsertable(lastFocused || null)) {\n return false;\n }\n dispatch(drag({ y, x }));\n\n if (editingAnywhere) {\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: x });\n const fullRange = `${table.sheetPrefix(!xSheetFocused)}${areaToRange(newArea)}`;\n insertRef({ input: lastFocused || null, ref: fullRange });\n }\n //table.wire.transmit(); // Force drawing because the formula is not reflected in largeInput\n return true;\n },\n [\n autofillDraggingTo,\n leftHeaderSelecting,\n topHeaderSelecting,\n table,\n editingAnywhere,\n lastFocused,\n selectingZone,\n xSheetFocused,\n ],\n );\n\n const handleAutofillMouseDown = useCallback((e: React.MouseEvent) => {\n dispatch(setAutofillDraggingTo({ x, y }));\n dispatch(setDragging(true));\n e.stopPropagation();\n }, []);\n\n // --- Memoize event handlers with useCallback ---\n const onContextMenu = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (contextMenuItems.length > 0) {\n e.stopPropagation();\n safePreventDefault(e);\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }\n return true;\n },\n [contextMenuItems.length],\n );\n\n const onDoubleClick = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n e.stopPropagation();\n safePreventDefault(e);\n setEditingAddress(address);\n const dblclick = document.createEvent('MouseEvents');\n dblclick.initEvent('dblclick', true, true);\n input?.dispatchEvent(dblclick);\n return false;\n },\n [address, input],\n );\n\n const autofillDragClass = useMemo(() => {\n if (!editing && pointed && selectingArea.bottom === -1) {\n return 'gs-autofill-drag';\n }\n\n if (selectingArea.bottom === y && selectingArea.right === x) {\n return 'gs-autofill-drag';\n }\n return 'gs-autofill-drag gs-hidden';\n }, [editing, pointed, selectingArea]);\n\n if (!input) {\n return (\n <td key={x} data-x={x} data-y={y} data-address={address} className=\"gs-cell gs-hidden\">\n <div className=\"gs-cell-inner-wrap\">\n <div className=\"gs-cell-inner\">\n <div className=\"gs-cell-rendered\"></div>\n </div>\n <div className=\"gs-autofill-drag\"></div>\n </div>\n </td>\n );\n }\n\n return (\n <td\n key={x}\n ref={cellRef}\n data-x={x}\n data-y={y}\n data-address={address}\n className={`gs-cell ${among(selectingArea, { y, x }) ? 'gs-selecting' : ''} ${pointed ? 'gs-choosing' : ''} ${\n editing ? 'gs-editing' : ''\n }`}\n style={{\n ...cell?.style,\n ...operationStyle,\n }}\n onContextMenu={onContextMenu}\n onDoubleClick={onDoubleClick}\n >\n <div\n className={`gs-cell-inner-wrap`}\n onMouseDown={handleDragStart}\n onTouchStart={handleDragStart}\n onMouseEnter={handleDragging}\n onMouseUp={handleDragEnd}\n >\n <div\n className={'gs-cell-inner'}\n style={{\n ...cell?.style,\n justifyContent: cell?.justifyContent || 'left',\n alignItems: cell?.alignItems || 'start',\n }}\n >\n {errorMessage && <div className=\"gs-formula-error-triangle\" title={errorMessage} />}\n {showAddress && <div className=\"gs-cell-label\">{address}</div>}\n <div className=\"gs-cell-rendered\">{rendered}</div>\n </div>\n <div className={autofillDragClass} onMouseDown={handleAutofillMouseDown}></div>\n </div>\n </td>\n );\n});\n","import type { CSSProperties } from 'react';\nimport { useEffect, useRef, useContext, useCallback } from 'react';\nimport { Context } from '../store';\nimport { drag, setAutofillDraggingTo, setDragging, submitAutofill } from '../store/actions';\nimport { getAreaInTabular } from '../lib/virtualization';\nimport { insertRef, isFocus } from '../lib/input';\nimport { areaToRange, zoneToArea } from '../lib/structs';\nimport { isXSheetFocused } from '../store/helpers';\n\ntype Props = {\n className?: string;\n style: CSSProperties;\n horizontal?: number;\n vertical?: number;\n};\n\nconst acceleration = 0.4;\nconst maxSpeed = 200;\n\nlet lastScrollTime = new Date().getTime();\nlet currentSpeed = 0;\n\nexport function ScrollHandle({ style, horizontal = 0, vertical = 0, className = '' }: Props) {\n const scrollRef = useRef<number | null>(null);\n const { store, dispatch } = useContext(Context);\n const {\n tabularRef,\n autofillDraggingTo,\n dragging,\n selectingZone,\n editorRef,\n tableReactive: tableRef,\n searchInputRef,\n editingAddress,\n } = store;\n const table = tableRef.current;\n\n let isScrolling = false;\n const xSheetFocused = isXSheetFocused(store);\n const editingAnywhere = !!(table?.wire.editingAddress || editingAddress);\n\n const getDestEdge = useCallback(\n (e: React.MouseEvent) => {\n if (!table) {\n return { x: -1, y: -1 };\n }\n if (horizontal == 0 && vertical == 0) {\n const tabularRect = tabularRef.current!.getBoundingClientRect();\n const { left, top, right, bottom } = tabularRect;\n horizontal = e.pageX > right ? 1 : e.pageX < left ? -1 : 0;\n if (horizontal === 0) {\n vertical = e.pageY > bottom ? 1 : e.pageY < top ? -1 : 0;\n }\n }\n const area = getAreaInTabular(tabularRef.current!);\n let { endX: x, endY: y } = selectingZone;\n if (horizontal) {\n x = horizontal > 0 ? area.right : area.left;\n } else if (vertical) {\n y = vertical > 0 ? area.bottom : area.top;\n }\n return { x, y };\n },\n [table, horizontal, vertical, selectingZone],\n );\n\n const scrollStep = useCallback(\n (e: React.MouseEvent) => {\n if (!isScrolling || tabularRef.current === null || !table) {\n return;\n }\n const now = new Date().getTime();\n if (now - lastScrollTime > 1000) {\n currentSpeed = 0;\n }\n lastScrollTime = now;\n\n tabularRef.current.scrollBy({\n left: currentSpeed * horizontal!,\n top: currentSpeed * vertical!,\n });\n editorRef.current!.focus();\n\n const { x, y } = getDestEdge(e);\n if (autofillDraggingTo) {\n const { y: curY, x: curX } = autofillDraggingTo;\n dispatch(setAutofillDraggingTo({ y: y === -1 ? curY : y, x: x === -1 ? curX : x }));\n } else {\n if (editingAnywhere) {\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: x });\n const sheetPrefix = table.sheetPrefix(!xSheetFocused);\n const sheetRange = areaToRange(newArea);\n const fullRange = `${sheetPrefix}${sheetRange}`;\n insertRef({ input: editorRef.current, ref: fullRange });\n }\n dispatch(drag({ y, x }));\n }\n currentSpeed = Math.min(currentSpeed + acceleration, maxSpeed);\n scrollRef.current = requestAnimationFrame(() => scrollStep(e));\n },\n [\n isScrolling,\n table,\n horizontal,\n vertical,\n autofillDraggingTo,\n editingAnywhere,\n selectingZone,\n xSheetFocused,\n getDestEdge,\n ],\n );\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (isScrolling) {\n return;\n }\n isScrolling = true;\n\n if (horizontal === 0 || vertical === 0) {\n const tabularRect = tabularRef.current!.getBoundingClientRect();\n const { left, top, right, bottom } = tabularRect;\n\n horizontal ||= e.pageX > right ? 1 : e.pageX < left ? -1 : 0;\n if (horizontal === 0) {\n vertical ||= e.pageY > bottom ? 1 : e.pageY < top ? -1 : 0;\n }\n }\n scrollRef.current = requestAnimationFrame(() => scrollStep(e));\n },\n [isScrolling, horizontal, vertical, scrollStep],\n );\n\n const stopScroll = useCallback(() => {\n if (scrollRef.current !== null) {\n cancelAnimationFrame(scrollRef.current);\n scrollRef.current = null;\n }\n isScrolling = false;\n if (!isFocus(searchInputRef.current)) {\n // Pressing Enter on a search result will not focus the editor.\n editorRef.current?.focus?.();\n }\n }, []);\n\n const handleMouseUp = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const area = getAreaInTabular(tabularRef.current!);\n if (area.bottom === -1 || area.right === -1) {\n return;\n }\n\n const { x, y } = getDestEdge(e);\n if (autofillDraggingTo) {\n const { y: curY, x: curX } = autofillDraggingTo;\n dispatch(submitAutofill({ y: y === -1 ? curY : y, x: x === -1 ? curX : x }));\n editorRef.current!.focus();\n } else {\n if (editingAnywhere) {\n // inserting a range\n dispatch(drag({ y: -1, x: -1 })); // Reset dragging\n }\n }\n },\n [autofillDraggingTo, editingAnywhere, getDestEdge],\n );\n\n const handleMouseUpWrapper = useCallback(\n (e: React.MouseEvent) => {\n stopScroll();\n dispatch(setDragging(false));\n requestAnimationFrame(() => handleMouseUp(e));\n },\n [stopScroll, handleMouseUp],\n );\n\n const handleMouseLeave = useCallback(() => {\n stopScroll();\n }, [stopScroll]);\n\n useEffect(() => {\n return stopScroll;\n }, [stopScroll]);\n\n if (!editorRef.current || (!dragging && !autofillDraggingTo)) {\n return <div className={`gs-scroll-handle gs-hidden ${className}`} />;\n }\n\n return (\n <div\n style={style}\n className={`gs-scroll-handle ${className}`}\n onMouseUp={(e) => {\n handleMouseUpWrapper(e);\n }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n />\n );\n}\n","import type { FC } from 'react';\nimport { useContext, useCallback, memo, useRef } from 'react';\nimport { x2c } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectCols,\n setAutofillDraggingTo,\n setContextMenuPosition,\n setDragging,\n setEditingAddress,\n setResizingPositionX,\n submitAutofill,\n write,\n} from '../store/actions';\nimport { DEFAULT_WIDTH } from '../constants';\nimport * as prevention from '../lib/operation';\nimport { insertRef } from '../lib/input';\nimport { isXSheetFocused } from '../store/helpers';\nimport { ScrollHandle } from './ScrollHandle';\nimport { isTouching, safePreventDefault } from '../lib/events';\nimport { useDebounceCallback } from './hooks';\n\ntype Props = {\n x: number;\n};\n\nexport const HeaderCellTop: FC<Props> = memo(({ x }) => {\n const colId = x2c(x);\n const { store, dispatch } = useContext(Context);\n\n const {\n tableReactive: tableRef,\n editingAddress,\n choosing,\n selectingZone,\n topHeaderSelecting,\n editorRef,\n autofillDraggingTo,\n dragging,\n contextMenuItems,\n } = store;\n const table = tableRef.current;\n\n const col = table?.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const width = col?.width || DEFAULT_WIDTH;\n\n const xSheetFocused = isXSheetFocused(store);\n const lastFocused = table?.wire.lastFocused;\n\n const editingAnywhere = !!(table?.wire.editingAddress || editingAddress);\n\n const writeCell = useCallback(\n (value: string) => {\n dispatch(write({ value, point: choosing }));\n },\n [choosing],\n );\n\n const handleResizeMouseDown = useCallback((e: React.MouseEvent) => {\n dispatch(setResizingPositionX([x, e.clientX, e.clientX]));\n e.stopPropagation();\n safePreventDefault(e);\n }, []);\n\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n safePreventDefault(e);\n\n if (!isTouching(e) || !table) {\n return false;\n }\n\n if (dragging) {\n return false;\n }\n\n // Single column selection only for touch events\n if (e.type.startsWith('touch')) {\n // Blur the input field to commit current value when selecting via touch\n if (editingAnywhere && editorRef.current) {\n editorRef.current.blur();\n }\n dispatch(choose({ y: 1, x }));\n dispatch(select({ startY: 1, startX: x, endY: table.getNumRows(), endX: x }));\n return true;\n }\n\n dispatch(select({ startY: 1, startX: x, endY: -1, endX: x }));\n const fullAddress = `${table.sheetPrefix(!xSheetFocused)}${colId}:${colId}`;\n if (editingAnywhere) {\n const inserted = insertRef({ input: lastFocused || null, ref: fullAddress });\n if (inserted) {\n dispatch(select({ startY: table.getNumRows(), startX: x, endY: 0, endX: x }));\n return false;\n }\n }\n\n let startX = e.shiftKey ? selectingZone.startX : x;\n if (startX === -1) {\n startX = choosing.x;\n }\n\n dispatch(\n selectCols({\n range: { start: startX, end: x },\n numRows: table.getNumRows(),\n }),\n );\n\n if (editingAnywhere) {\n writeCell(lastFocused?.value ?? '');\n }\n dispatch(choose({ y: 1, x: startX }));\n dispatch(setEditingAddress(''));\n dispatch(setDragging(true));\n\n if (autofillDraggingTo) {\n return false;\n }\n return true;\n },\n [dragging, editingAnywhere, xSheetFocused, colId, lastFocused, selectingZone, choosing, autofillDraggingTo],\n );\n\n const handleDragEnd = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n if (e.type.startsWith('touch')) {\n return;\n }\n\n safePreventDefault(e);\n dispatch(setDragging(false));\n if (autofillDraggingTo) {\n editorRef.current!.focus();\n return false;\n }\n },\n [autofillDraggingTo],\n );\n\n const handleDragging = useDebounceCallback((e: React.MouseEvent | React.TouchEvent) => {\n if (!isTouching(e) || !table) {\n return false;\n }\n\n if (e.type.startsWith('touch')) {\n return false;\n }\n\n safePreventDefault(e);\n e.stopPropagation();\n\n if (autofillDraggingTo) {\n dispatch(setAutofillDraggingTo({ y: 1, x }));\n return false;\n }\n\n if (editingAnywhere) {\n const newArea = zoneToArea({ ...selectingZone, endY: 1, endX: x });\n const [left, right] = [x2c(newArea.left), x2c(newArea.right)];\n const fullRange = `${table.sheetPrefix(!xSheetFocused)}${left}:${right}`;\n insertRef({ input: lastFocused || null, ref: fullRange });\n }\n\n if (autofillDraggingTo == null) {\n const { startY } = selectingZone;\n if (startY === 1) {\n dispatch(drag({ y: table.getNumRows(), x }));\n } else {\n dispatch(drag({ y: 1, x }));\n }\n }\n return false;\n }, 100);\n\n if (!table) {\n return (\n <th data-x={x} className=\"gs-th gs-th-top gs-hidden\">\n <div className=\"gs-th-inner-wrap\">\n <div className=\"gs-th-inner\">\n <ScrollHandle style={{ position: 'absolute' }} vertical={-1} />\n <div className=\"gs-resizer\"></div>\n </div>\n </div>\n </th>\n );\n }\n\n return (\n <th\n data-x={x}\n className={`gs-th gs-th-top ${choosing.x === x ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startX, end: selectingZone.endX }, x)\n ? topHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ width, minWidth: width, maxWidth: width }}\n onContextMenu={(e) => {\n if (contextMenuItems.length > 0) {\n e.stopPropagation();\n safePreventDefault(e);\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }\n return true;\n }}\n >\n <div\n className=\"gs-th-inner-wrap\"\n onMouseDown={handleDragStart}\n onTouchStart={handleDragStart}\n onMouseEnter={handleDragging}\n onMouseUp={handleDragEnd}\n >\n <div className=\"gs-th-inner\" style={{ height: table.headerHeight, position: 'relative' }}>\n <ScrollHandle\n style={{\n position: 'absolute',\n zIndex: topHeaderSelecting ? -1 : 1,\n }}\n vertical={-1}\n />\n {table.getLabel(col?.labeler, x) ?? colId}\n <div\n className={`\n gs-resizer \n ${prevention.hasOperation(col?.prevention, prevention.Resize) ? 'gs-protected' : ''}\n ${dragging ? 'gs-hidden' : ''}`}\n style={{ height: table.headerHeight }}\n onMouseDown={handleResizeMouseDown}\n >\n <i />\n </div>\n </div>\n </div>\n </th>\n );\n});\n","import type { FC } from 'react';\nimport { useContext, useCallback, memo, useRef } from 'react';\nimport { y2r } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectRows,\n setAutofillDraggingTo,\n setContextMenuPosition,\n setDragging,\n setEditingAddress,\n setResizingPositionY,\n submitAutofill,\n write,\n} from '../store/actions';\nimport { DEFAULT_HEIGHT } from '../constants';\nimport * as prevention from '../lib/operation';\nimport { insertRef } from '../lib/input';\nimport { isXSheetFocused } from '../store/helpers';\nimport { ScrollHandle } from './ScrollHandle';\nimport { isTouching, safePreventDefault } from '../lib/events';\nimport { useDebounceCallback } from './hooks';\n\ntype Props = {\n y: number;\n};\n\nexport const HeaderCellLeft: FC<Props> = memo(({ y }) => {\n const rowId = `${y2r(y)}`;\n const { store, dispatch } = useContext(Context);\n\n const {\n choosing,\n editingAddress,\n selectingZone,\n leftHeaderSelecting,\n editorRef,\n tableReactive: tableRef,\n autofillDraggingTo,\n dragging,\n contextMenuItems,\n } = store;\n const table = tableRef.current;\n\n const row = table?.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const height = row?.height || DEFAULT_HEIGHT;\n\n const xSheetFocused = isXSheetFocused(store);\n const lastFocused = table?.wire.lastFocused;\n\n const editingAnywhere = !!(table?.wire.editingAddress || editingAddress);\n\n const writeCell = useCallback(\n (value: string) => {\n dispatch(write({ value, point: choosing }));\n },\n [choosing],\n );\n\n const handleResizeMouseDown = useCallback((e: React.MouseEvent) => {\n dispatch(setResizingPositionY([y, e.clientY, e.clientY]));\n e.stopPropagation();\n safePreventDefault(e);\n }, []);\n\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n safePreventDefault(e);\n\n if (!isTouching(e) || !table) {\n return false;\n }\n if (dragging) {\n return false;\n }\n\n // Single row selection only for touch events\n if (e.type.startsWith('touch')) {\n // Blur the input field to commit current value when selecting via touch\n if (editingAnywhere && editorRef.current) {\n editorRef.current.blur();\n }\n dispatch(choose({ y, x: 1 }));\n dispatch(select({ startY: y, startX: 1, endY: y, endX: table.getNumCols() }));\n return true;\n }\n\n // Normal drag operation for mouse events\n dispatch(select({ startY: y, startX: 1, endY: y, endX: -1 }));\n const fullAddress = `${table.sheetPrefix(!xSheetFocused)}${rowId}:${rowId}`;\n if (editingAnywhere) {\n const inserted = insertRef({ input: lastFocused || null, ref: fullAddress });\n if (inserted) {\n dispatch(select({ startY: y, startX: table.getNumCols(), endY: y, endX: 0 }));\n return false;\n }\n }\n\n let startY = e.shiftKey ? selectingZone.startY : y;\n if (startY === -1) {\n startY = choosing.y;\n }\n\n dispatch(\n selectRows({\n range: { start: startY, end: y },\n numCols: table.getNumCols(),\n }),\n );\n\n if (editingAnywhere) {\n writeCell(lastFocused?.value ?? '');\n }\n dispatch(choose({ y: startY, x: 1 }));\n dispatch(setEditingAddress(''));\n dispatch(setDragging(true));\n\n if (autofillDraggingTo) {\n return false;\n }\n return true;\n },\n [dragging, editingAnywhere, xSheetFocused, rowId, lastFocused, selectingZone, choosing, autofillDraggingTo],\n );\n\n const handleDragEnd = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n if (e.type.startsWith('touch')) {\n return;\n }\n\n safePreventDefault(e);\n dispatch(setDragging(false));\n if (autofillDraggingTo) {\n editorRef.current!.focus();\n return false;\n }\n },\n [autofillDraggingTo],\n );\n\n const handleDragging = useDebounceCallback((e: React.MouseEvent | React.TouchEvent) => {\n if (!isTouching(e) || !table) {\n return false;\n }\n\n // Do nothing for touch events\n if (e.type.startsWith('touch')) {\n return false;\n }\n\n safePreventDefault(e);\n e.stopPropagation();\n\n if (autofillDraggingTo) {\n dispatch(setAutofillDraggingTo({ y, x: 1 }));\n return false;\n }\n\n if (editingAnywhere) {\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: 1 });\n const [top, bottom] = [y2r(newArea.top), y2r(newArea.bottom)];\n const fullRange = `${table.sheetPrefix(!xSheetFocused)}${top}:${bottom}`;\n insertRef({ input: lastFocused || null, ref: fullRange });\n }\n\n if (autofillDraggingTo == null) {\n const { startX } = selectingZone;\n if (startX === 1) {\n dispatch(drag({ y, x: table.getNumCols() }));\n } else {\n dispatch(drag({ y, x: 1 }));\n }\n }\n return false;\n }, 100);\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (contextMenuItems.length > 0) {\n e.stopPropagation();\n safePreventDefault(e);\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }\n return true;\n },\n [contextMenuItems.length],\n );\n\n if (!table) {\n return null;\n }\n\n return (\n <th\n data-y={y}\n className={`gs-th gs-th-left ${choosing.y === y ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startY, end: selectingZone.endY }, y)\n ? leftHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ height }}\n onContextMenu={handleContextMenu}\n >\n <div\n className=\"gs-th-inner-wrap\"\n onMouseDown={handleDragStart}\n onTouchStart={handleDragStart}\n onMouseEnter={handleDragging}\n onMouseUp={handleDragEnd}\n >\n <div className=\"gs-th-inner\" style={{ width: table.headerWidth, position: 'relative' }}>\n <ScrollHandle\n style={{\n position: 'absolute',\n zIndex: leftHeaderSelecting ? -1 : 1,\n }}\n horizontal={-1}\n />\n {table.getLabel(row?.labeler, y) ?? rowId}\n <div\n className={`\n gs-resizer\n ${prevention.hasOperation(row?.prevention, prevention.Resize) ? 'gs-protected' : ''}\n ${dragging ? 'gs-hidden' : ''}`}\n style={{ width: table.headerWidth }}\n onMouseDown={handleResizeMouseDown}\n ></div>\n </div>\n </div>\n </th>\n );\n});\n","import { useEffect, useContext, useRef, useState, createRef, useCallback, RefObject } from 'react';\n\nimport { Cell } from './Cell';\nimport { HeaderCellTop } from './HeaderCellTop';\nimport { HeaderCellLeft } from './HeaderCellLeft';\n\nimport { Context } from '../store';\nimport { choose, select, updateTable } from '../store/actions';\n\nimport type { RefPaletteType, PointType, StoreType, Connector, Virtualization } from '../types';\nimport { virtualize } from '../lib/virtualization';\nimport { a2p, p2a, stripAddressAbsolute } from '../lib/converters';\nimport { zoneToArea } from '../lib/structs';\nimport { Lexer, stripSheetName } from '../formula/evaluator';\nimport { COLOR_PALETTE } from '../lib/palette';\nimport { Autofill } from '../lib/autofill';\nimport { ScrollHandle } from './ScrollHandle';\n\nexport const Tabular = () => {\n const [palette, setPalette] = useState<RefPaletteType>({});\n const { store, dispatch } = useContext(Context);\n const {\n tableReactive,\n choosing,\n editingAddress,\n tabularRef,\n mainRef,\n sheetWidth,\n sheetHeight,\n inputting,\n leftHeaderSelecting,\n topHeaderSelecting,\n totalWidth,\n totalHeight,\n } = store;\n const table = tableReactive.current;\n\n const [virtualized, setVirtualized] = useState<Virtualization | null>(null);\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleScroll = useCallback(\n (e: React.UIEvent<HTMLDivElement>) => {\n if (table) {\n setVirtualized(virtualize(table, e.currentTarget));\n }\n },\n [tableReactive],\n );\n\n const handleSelectAllClick = useCallback(() => {\n if (!table) {\n return;\n }\n dispatch(choose({ y: -1, x: -1 }));\n requestAnimationFrame(() => {\n dispatch(choose({ y: 1, x: 1 }));\n dispatch(\n select({\n startY: 1,\n startX: 1,\n endY: table.getNumRows(),\n endX: table.getNumCols(),\n }),\n );\n });\n }, [tableReactive]);\n\n useEffect(() => {\n if (!table) {\n return;\n }\n const formulaEditing = editingAddress && inputting.startsWith('=');\n if (!formulaEditing) {\n setPalette({});\n table.wire.paletteBySheetName = {};\n return;\n }\n const palette: RefPaletteType = {};\n const paletteBySheetName: { [sheetName: string]: RefPaletteType } = {};\n const lexer = new Lexer(inputting.substring(1));\n lexer.tokenize();\n\n let i = 0;\n for (const token of lexer.tokens) {\n if (token.type === 'REF' || token.type === 'RANGE') {\n const normalizedRef = stripAddressAbsolute(token.stringify());\n const splitterIndex = normalizedRef.indexOf('!');\n if (splitterIndex !== -1) {\n const sheetName = normalizedRef.substring(0, splitterIndex);\n const ref = normalizedRef.substring(splitterIndex + 1);\n const stripped = stripSheetName(sheetName);\n const upperRef = ref.toUpperCase();\n if (paletteBySheetName[stripped] == null) {\n paletteBySheetName[stripped] = {};\n }\n if (paletteBySheetName[stripped][upperRef] == null) {\n paletteBySheetName[stripped][upperRef] = i++;\n }\n } else {\n const upperRef = normalizedRef.toUpperCase();\n if (palette[upperRef] == null) {\n palette[upperRef] = i++;\n }\n }\n }\n }\n setPalette(palette);\n table.wire.paletteBySheetName = paletteBySheetName;\n }, [store.inputting, store.editingAddress, tableReactive]);\n\n useEffect(() => {\n if (!table) {\n return;\n }\n table.wire.choosingAddress = p2a(choosing);\n }, [choosing]);\n\n useEffect(() => {\n if (!table) {\n return;\n }\n setVirtualized(virtualize(table, tabularRef.current));\n }, [tabularRef.current, tableReactive, mainRef.current?.clientHeight, mainRef.current?.clientWidth]);\n\n if (!table || !table.wire.ready) {\n return null;\n }\n\n const operationStyles = useOperationStyles(store, {\n ...palette,\n ...table.wire.paletteBySheetName[table.sheetName],\n });\n\n return (\n <>\n <div\n className=\"gs-tabular\"\n style={{\n width: sheetWidth === -1 ? undefined : sheetWidth,\n height: sheetHeight === -1 ? undefined : sheetHeight,\n }}\n ref={tabularRef}\n onMouseMove={handleMouseMove}\n onScroll={handleScroll}\n >\n <div\n className={'gs-tabular-inner'}\n style={{\n width: totalWidth + 1,\n height: totalHeight + 1,\n }}\n >\n <table className={`gs-table`}>\n <thead className=\"gs-thead\" style={{ height: table.headerHeight }}>\n <tr className=\"gs-row\">\n <th\n className=\"gs-th gs-th-left gs-th-top\"\n style={{ position: 'sticky', width: table.headerWidth, height: table.headerHeight }}\n onClick={handleSelectAllClick}\n >\n <div className=\"gs-th-inner\">\n <ScrollHandle\n className={leftHeaderSelecting || topHeaderSelecting ? 'gs-hidden' : ''}\n style={{ position: 'absolute' }}\n horizontal={leftHeaderSelecting ? 0 : -1}\n vertical={topHeaderSelecting ? 0 : -1}\n />\n </div>\n </th>\n <th\n className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-left\"\n style={{ width: virtualized?.adjuster?.left ?? 1 }}\n ></th>\n {virtualized?.xs?.map?.((x) => <HeaderCellTop x={x} key={x} />)}\n <th\n className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-right\"\n style={{ width: virtualized?.adjuster?.right }}\n ></th>\n </tr>\n </thead>\n\n <tbody className=\"gs-table-body-adjuster\">\n <tr className=\"gs-row\">\n <th\n className={`gs-adjuster gs-adjuster-horizontal gs-adjuster-vertical`}\n style={{ height: virtualized?.adjuster?.top ?? 1 }}\n ></th>\n <td className=\"gs-adjuster gs-adjuster-vertical\"></td>\n {virtualized?.xs?.map((x) => <td className=\"gs-adjuster gs-adjuster-vertical\" key={x}></td>)}\n <th className={`gs-adjuster gs-adjuster-horizontal gs-adjuster-vertical`}></th>\n </tr>\n </tbody>\n\n <tbody className=\"gs-table-body-data\">\n {virtualized?.ys?.map((y) => {\n return (\n <tr key={y} className=\"gs-row\">\n <HeaderCellLeft y={y} />\n <td className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-left\" />\n {virtualized?.xs?.map((x) => (\n <Cell key={x} y={y} x={x} operationStyle={operationStyles[p2a({ y, x })]} />\n ))}\n <td className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-right\" />\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n </>\n );\n};\n\nconst BORDER_POINTED = 'solid 2px #0077ff';\nconst BORDER_SELECTED = 'solid 1px #0077ff';\nconst BORDER_CUTTING = 'dotted 2px #0077ff';\nconst BORDER_COPYING = 'dashed 2px #0077ff';\nconst SEARCH_MATCHING_BACKGROUND = 'rgba(0,200,100,.2)';\nconst SEARCH_MATCHING_BORDER = 'solid 2px #00aa78';\nconst AUTOFILL_BORDER = 'dashed 1px #444444';\n\nconst useOperationStyles = (store: StoreType, refs: RefPaletteType) => {\n const cellStyles: { [key: string]: React.CSSProperties } = {};\n const updateStyle = (point: PointType, style: React.CSSProperties) => {\n const address = p2a(point);\n cellStyles[address] = cellStyles[address] || {};\n Object.assign(cellStyles[address], style);\n };\n const {\n choosing,\n selectingZone,\n matchingCells,\n matchingCellIndex,\n tableReactive,\n autofillDraggingTo,\n editingAddress,\n } = store;\n const table = tableReactive.current;\n if (!table) {\n return {};\n }\n const { wire } = table;\n const { copyingSheetId, copyingZone, cutting } = wire;\n const editingAnywhere = !!(wire.editingAddress || editingAddress);\n\n {\n // selecting\n const { top, left, bottom, right } = zoneToArea(selectingZone);\n if (!editingAnywhere) {\n for (let y = top; y <= bottom; y++) {\n updateStyle({ y, x: left - 1 }, { borderRight: BORDER_SELECTED });\n updateStyle({ y, x: left }, { borderLeft: BORDER_SELECTED });\n updateStyle({ y, x: right }, { borderRight: BORDER_SELECTED });\n updateStyle({ y, x: right + 1 }, { borderLeft: BORDER_SELECTED });\n }\n for (let x = left; x <= right; x++) {\n updateStyle({ y: top - 1, x }, { borderBottom: BORDER_SELECTED });\n updateStyle({ y: top, x }, { borderTop: BORDER_SELECTED });\n updateStyle({ y: bottom, x }, { borderBottom: BORDER_SELECTED });\n updateStyle({ y: bottom + 1, x }, { borderTop: BORDER_SELECTED });\n }\n }\n }\n if (autofillDraggingTo) {\n const autofill = new Autofill(store, autofillDraggingTo);\n const { top, left, bottom, right } = autofill.wholeArea;\n for (let y = top; y <= bottom; y++) {\n updateStyle({ y, x: left - 1 }, { borderRight: AUTOFILL_BORDER });\n updateStyle({ y, x: left }, { borderLeft: AUTOFILL_BORDER });\n updateStyle({ y, x: right }, { borderRight: AUTOFILL_BORDER });\n updateStyle({ y, x: right + 1 }, { borderLeft: AUTOFILL_BORDER });\n }\n for (let x = left; x <= right; x++) {\n updateStyle({ y: top - 1, x }, { borderBottom: AUTOFILL_BORDER });\n updateStyle({ y: top, x }, { borderTop: AUTOFILL_BORDER });\n updateStyle({ y: bottom, x }, { borderBottom: AUTOFILL_BORDER });\n updateStyle({ y: bottom + 1, x }, { borderTop: AUTOFILL_BORDER });\n }\n }\n {\n // choosing\n const { y, x } = choosing;\n updateStyle(\n { y, x },\n {\n borderLeft: BORDER_POINTED,\n borderRight: BORDER_POINTED,\n borderTop: BORDER_POINTED,\n borderBottom: BORDER_POINTED,\n },\n );\n updateStyle({ y, x: x - 1 }, { borderRight: BORDER_POINTED });\n updateStyle({ y, x: x + 1 }, { borderLeft: BORDER_POINTED });\n updateStyle({ y: y - 1, x }, { borderBottom: BORDER_POINTED });\n updateStyle({ y: y + 1, x }, { borderTop: BORDER_POINTED });\n }\n if (table.sheetId === copyingSheetId) {\n // copying\n const borderStyle = cutting ? BORDER_CUTTING : BORDER_COPYING;\n const { top, left, bottom, right } = zoneToArea(copyingZone);\n for (let y = top; y <= bottom; y++) {\n updateStyle({ y, x: left - 1 }, { borderRight: borderStyle });\n updateStyle({ y, x: left }, { borderLeft: borderStyle });\n updateStyle({ y, x: right }, { borderRight: borderStyle });\n updateStyle({ y, x: right + 1 }, { borderLeft: borderStyle });\n }\n for (let x = left; x <= right; x++) {\n updateStyle({ y: top - 1, x }, { borderBottom: borderStyle });\n updateStyle({ y: top, x }, { borderTop: borderStyle });\n updateStyle({ y: bottom, x }, { borderBottom: borderStyle });\n updateStyle({ y: bottom + 1, x }, { borderTop: borderStyle });\n }\n }\n\n Object.entries(refs).forEach(([ref, i]) => {\n const palette = COLOR_PALETTE[i % COLOR_PALETTE.length];\n const borderStyle = `dashed 2px ${palette}`;\n const { top, left, bottom, right } = table.rangeToArea(ref);\n for (let y = top; y <= bottom; y++) {\n updateStyle({ y, x: left - 1 }, { borderRight: borderStyle });\n updateStyle({ y, x: left }, { borderLeft: borderStyle });\n updateStyle({ y, x: right }, { borderRight: borderStyle });\n updateStyle({ y, x: right + 1 }, { borderLeft: borderStyle });\n }\n for (let x = left; x <= right; x++) {\n updateStyle({ y: top - 1, x }, { borderBottom: borderStyle });\n updateStyle({ y: top, x }, { borderTop: borderStyle });\n updateStyle({ y: bottom, x }, { borderBottom: borderStyle });\n updateStyle({ y: bottom + 1, x }, { borderTop: borderStyle });\n }\n });\n matchingCells.forEach((address) => {\n const { y, x } = a2p(address);\n updateStyle({ y, x }, { backgroundColor: SEARCH_MATCHING_BACKGROUND });\n });\n if (matchingCells.length > 0) {\n const { y, x } = a2p(matchingCells[matchingCellIndex]);\n updateStyle(\n { y, x },\n {\n borderLeft: SEARCH_MATCHING_BORDER,\n borderRight: SEARCH_MATCHING_BORDER,\n borderTop: SEARCH_MATCHING_BORDER,\n borderBottom: SEARCH_MATCHING_BORDER,\n },\n );\n updateStyle({ y, x: x - 1 }, { borderRight: SEARCH_MATCHING_BORDER });\n updateStyle({ y, x: x + 1 }, { borderLeft: SEARCH_MATCHING_BORDER });\n updateStyle({ y: y - 1, x }, { borderBottom: SEARCH_MATCHING_BORDER });\n updateStyle({ y: y + 1, x }, { borderTop: SEARCH_MATCHING_BORDER });\n }\n return cellStyles;\n};\n","// pnpm generate-style\nexport const LAST_MODIFIED = 1753483021;\nexport const CSS = `.gs-root1{display:inline-block;position:relative;border-spacing:0;width:fit-content;max-width:100%;overflow:auto;font-family:\"SF Pro Text\",\"SF Pro Icons\",\"Helvetica Neue\",Helvetica,Arial,Meiryo,sans-serif;visibility:hidden;opacity:0}.gs-root1.gs-initialized{visibility:visible;opacity:1;transition:opacity .2s ease-in-out}.gs-root1 .gs-main{flex:1;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.gs-root1 .gs-resizing{width:100%;height:100%;position:absolute;background-color:rgba(0,127,255,.08);top:0;left:0;z-index:2}.gs-root1 .gs-line-horizontal{width:100%}.gs-root1 .gs-line-vertical{height:100%}.gs-root1 .gs-line{position:relative;top:0;left:0;border:dotted 1px #07f;box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:#07f;color:#fff;margin:0;position:absolute;top:0;left:0}.gs-root1 .gs-scroll-handle{width:100%;height:100%;cursor:cell}.gs-hidden{visibility:hidden;position:absolute;top:0;left:0;width:0;height:0;overflow:hidden;pointer-events:none;z-index:-1}.gs-fixed{position:fixed;top:0;left:0;z-index:1}.gs-root1[data-mode=light]{background-color:#e2e2e2;color:#000}.gs-root1[data-mode=light] .gs-main{background-color:#e2e2e2;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd}.gs-root1[data-mode=light] .gs-tabular{background-color:#e2e2e2}.gs-root1[data-mode=light] .gs-formula-bar{background-color:#efefef}.gs-root1[data-mode=light] .gs-formula-bar-editor-inner{color:#555}.gs-root1[data-mode=light] .gs-cell{border-top:solid 1px #ddd;border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-adjuster{background-color:#ddd}.gs-root1[data-mode=light] .gs-tabular-inner{background-color:#f7f7f7}.gs-root1[data-mode=light] .gs-th{background-color:#efefef;color:#666}.gs-root1[data-mode=light] .gs-th.gs-selecting{background-color:#d2d2d2}.gs-root1[data-mode=light] .gs-th.gs-choosing{background-color:#bbb}.gs-root1[data-mode=light] .gs-th.gs-th-selecting{background-color:#555;color:#fff}.gs-root1[data-mode=light] .gs-th-top{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-top .gs-th-inner{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left .gs-th-inner{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-search-bar{color:rgba(0,0,0,.3)}.gs-editor[data-mode=light].gs-editing textarea{caret-color:#000000}.gs-editor[data-mode=light].gs-editing .gs-editor-hl{background-color:#f7f7f7;color:#000}.gs-editor[data-mode=light] .gs-editor-options{color:#000;background-color:#f7f7f7;border:solid 1px #ddd}.gs-root1[data-mode=dark]{background-color:#5a5a5a;color:#eee}.gs-root1[data-mode=dark] .gs-main{background-color:#3f3f3f;border-right:solid 1px #5a5a5a;border-bottom:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-tabular{background-color:#3f3f3f}.gs-root1[data-mode=dark] .gs-formula-bar{background-color:#4f4f4f}.gs-root1[data-mode=dark] .gs-formula-bar-editor-inner{color:#bbb}.gs-root1[data-mode=dark] .gs-cell{border-top:solid 1px #5a5a5a;border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-adjuster{background-color:#5a5a5a}.gs-root1[data-mode=dark] .gs-tabular-inner{background-color:#212121}.gs-root1[data-mode=dark] .gs-large-editor textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-th{background-color:#4f4f4f;color:#eee}.gs-root1[data-mode=dark] .gs-th.gs-selecting{background-color:#606060}.gs-root1[data-mode=dark] .gs-th.gs-choosing{background-color:#777}.gs-root1[data-mode=dark] .gs-th.gs-th-selecting{background-color:#aaa;color:#444}.gs-root1[data-mode=dark] .gs-th-top{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-top .gs-th-inner{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left .gs-th-inner{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-search-bar textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-search-bar{color:rgba(255,255,255,.3)}.gs-editor[data-mode=dark].gs-editing textarea{caret-color:#eeeeee}.gs-editor[data-mode=dark].gs-editing .gs-editor-hl{background-color:#212121;color:#eee}.gs-editor[data-mode=dark] .gs-editor-options{color:#eee;background-color:#5a5a5a;border:solid 1px #5a5a5a}.gs-cell{transition:border-color .2s ease;padding:0;margin:0;box-sizing:border-box;position:relative;font-size:13px;letter-spacing:1px;line-height:24px;cursor:cell;user-select:none;-webkit-user-select:none;-moz-user-select:none}.gs-cell .gs-cell-inner-wrap.gs-selecting{background-color:rgba(0,128,255,.2)}.gs-cell.gs-copying textarea:focus{outline:solid 1px #0077ff}.gs-cell.gs-selecting{z-index:1}.gs-cell.gs-selecting .gs-cell-inner{background-color:rgba(0,128,255,.2)}.gs-cell.gs-selecting .gs-cell-label{display:block}.gs-cell.gs-choosing{margin-top:-1px;margin-left:-1px;z-index:1}.gs-cell.gs-choosing.gs-editing{color:transparent}.gs-cell.gs-choosing .gs-cell-label{display:block}.gs-cell .gs-formula-error-triangle{position:absolute;top:0;right:0;border-top:3px solid rgba(200,0,0,.9);border-right:3px solid rgba(200,0,0,.9);border-bottom:3px solid transparent;border-left:3px solid transparent;z-index:1}.gs-cell .gs-cell-label{font-size:8px;font-weight:400;font-style:normal;font-family:math,monospace,serif;letter-spacing:1px;line-height:14px;position:absolute;top:0;right:0;background-color:rgba(0,128,255,.2);color:rgba(255,255,255,.6);padding:0 2px;display:none;opacity:.7}.gs-cell .gs-cell-inner-wrap{width:100%;height:100%;position:absolute;top:0;left:0}.gs-cell .gs-cell-inner{width:100%;height:100%;overflow:hidden;display:flex;box-sizing:border-box;border:none!important}.gs-cell .gs-cell-rendered{overflow:hidden;white-space:pre-wrap;cursor:cell;word-wrap:break-word;word-break:break-all;padding:0 2px;width:100%;height:100%}.gs-cell .gs-cell-rendered>*{position:relative}.gs-cell .gs-cell-rendered>.backface{z-index:0}.gs-cell .gs-autofill-drag{background-color:#07f;position:absolute;width:7px;height:7px;bottom:0;right:0;margin-right:-3.5px;margin-bottom:-3.5px;cursor:crosshair;z-index:1}.gs-th[data-x=\"1\"] .gs-th-inner-wrap{border-left:none}.gs-th[data-y=\"1\"] .gs-th-inner-wrap{border-top:none}.gs-cell[data-x=\"1\"]{border-left:none}.gs-cell[data-y=\"1\"]{border-top:none}.gs-contextmenu-modal{width:100%;height:100vh;z-index:3}.gs-contextmenu{z-index:3;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px}.gs-contextmenu ul{min-width:250px;color:#555;margin:0;padding:0}.gs-contextmenu li{padding:5px 10px;list-style-type:none;display:flex}.gs-contextmenu li.gs-enabled{cursor:pointer}.gs-contextmenu li.gs-enabled:hover{background-color:#eee}.gs-contextmenu li.gs-disabled{opacity:.5;cursor:not-allowed}.gs-contextmenu li.gs-menu-divider{background-color:#aaa;margin:10px 0;padding:0;height:1px}.gs-contextmenu li .gs-menu-name{flex:1;font-size:15px;letter-spacing:1px}.gs-contextmenu li .gs-menu-shortcut{font-size:10px;line-height:20px;color:#999}.gs-contextmenu li .gs-menu-shortcut:before{content:\"( \"}.gs-contextmenu li .gs-menu-shortcut:after{content:\" )\"}.gs-contextmenu li .gs-menu-shortcut .gs-menu-underline{text-decoration:underline}.gs-editor-hl{padding:0 2px!important;position:absolute;font-family:monospace,Arial;font-size:12px;line-height:24px;letter-spacing:1px}.gs-formula-bar-editor-inner{position:relative;display:table-cell}.gs-editor{opacity:0;z-index:-1}.gs-editor .gs-editor-inner{position:relative}.gs-editor .gs-editor-hl{box-sizing:content-box;border:solid 2px #07f;margin:-2px -1px}.gs-editor textarea{width:100%;padding:0 2px!important;position:absolute;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;top:0;left:0;border:none;outline:0;background-color:transparent;color:transparent;resize:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;cursor:default;white-space:pre;height:auto}.gs-editor.gs-editing{z-index:3;opacity:1}.gs-editor.gs-editing .gs-cell-label{pointer-events:none;font-family:math,monospace,serif;position:absolute;top:0;right:0;margin-top:-15px;margin-right:-2px;padding:0 2px;font-size:10px;background-color:rgba(0,119,255,.75);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:table;align-items:center;justify-content:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box}.gs-formula-bar .gs-selecting-address{display:table-cell;vertical-align:middle;width:60px;color:rgba(200,200,200);font-size:13px;text-align:center}.gs-formula-bar .gs-fx{display:table-cell;vertical-align:middle;width:30px;color:rgba(200,200,200);font-style:italic;font-family:cursive;text-align:center;border-left:solid 1px rgba(128,128,128,.5);font-size:15px}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all}.gs-formula-bar textarea{position:relative;z-index:1;width:100%;vertical-align:bottom;color:transparent;border:none;background-color:transparent;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;resize:vertical;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all}.gs-token-type-INVALID_REF{color:red}.gs-token-type-VALUE.gs-token-entity-type-boolean,.gs-token-type-VALUE.gs-token-entity-type-number{color:#39f}.gs-token-type-VALUE.gs-token-entity-type-string{color:#090}.gs-editor-options{padding:0;box-shadow:0 2px 8px rgba(0,0,0,.25);border:1px solid rgba(128,128,128,.2);border-radius:4px}.gs-editor-option{cursor:pointer;list-style:none;padding:5px;font-size:12px}.gs-editor-option:hover{background-color:rgba(128,128,128,.1)}.gs-editor-option-selected{background-color:rgba(128,128,128,.2)}.gs-adjuster{padding:0}.gs-table{margin:0}.gs-tabular{overflow:auto;display:block;box-sizing:border-box;overscroll-behavior-x:contain}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-th{z-index:2;padding:0;position:sticky;font-size:13px;font-weight:400;box-sizing:border-box;vertical-align:top}.gs-th .gs-resizer{position:absolute;border-color:transparent;box-sizing:border-box;z-index:2}.gs-th .gs-resizer:hover{background-color:#07f}.gs-th .gs-resizer.gs-protected{display:none}.gs-th-inner{height:100%;box-sizing:border-box;vertical-align:middle;overflow:hidden;display:flex;align-items:center;justify-content:center}.gs-th-inner-wrap{height:100%;box-sizing:border-box;background-color:transparent}.gs-th-top{top:0;overflow:hidden}.gs-th-top .gs-resizer{top:0;right:0;width:3px;cursor:e-resize}.gs-th-top .gs-resizer.gs-dragging{border-right-style:dotted;height:1000000px!important;cursor:e-resize}.gs-th-left{left:0;overflow:hidden;min-width:30px;border-top:solid 1px #ddd}.gs-th-left .gs-resizer{left:0;bottom:0;height:3px;cursor:n-resize}.gs-th-left .gs-resizer.gs-dragging{border-bottom-style:dotted;width:1000000px!important;cursor:n-resize}.gs-th-top.gs-th-left{top:0;left:0;z-index:3;border:none!important}.gs-search-bar{width:100%;display:table;align-items:center;justify-content:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box;background-color:rgba(200,50,0,.2)}.gs-search-bar.gs-search-found{background-color:rgba(0,200,100,.2)}.gs-search-bar .gs-search-bar-inner{vertical-align:middle;border-left:solid 1px rgba(128,128,128,.5)}.gs-search-bar .gs-search-bar-icon{border-left:solid 1px rgba(128,128,128,.3);display:table-cell;vertical-align:middle;width:30px}.gs-search-bar textarea{background-color:transparent;border:none;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all;display:table-cell;vertical-align:middle;width:100%;resize:none}.gs-search-progress{display:table-cell;color:#999;font-size:13px;width:60px;vertical-align:middle;white-space:nowrap;text-align:center}.gs-search-close{display:table-cell;cursor:pointer;vertical-align:middle;width:24px}.gs-search-casesensitive{display:table-cell;cursor:pointer;vertical-align:middle;width:30px}.gs-search-casesensitive span{font-size:14px;padding:0 3px}.gs-search-casesensitive span.gs-search-casesensitive-on{color:#07f;background-color:rgba(200,200,255,.5);border-radius:3px}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}`;\n","import { CSS, LAST_MODIFIED } from './minified';\n\nexport const embedStyle = () => {\n if (typeof window === 'undefined') {\n return;\n }\n const exists = document.querySelector(`style.gs-styling[data-modified-at='${LAST_MODIFIED}']`);\n if (exists) {\n return;\n }\n const style = document.createElement('style');\n document.head.appendChild(style);\n style.setAttribute('class', 'gs-styling');\n style.setAttribute('data-modified-at', `${LAST_MODIFIED}`);\n style.innerText = CSS;\n};\n","import type { KeyboardEvent } from 'react';\nimport { useContext, useEffect, useState, useRef, useCallback } from 'react';\nimport { Context } from '../store';\nimport { p2a } from '../lib/converters';\nimport { setEditingAddress, setInputting, walk, write } from '../store/actions';\nimport * as prevention from '../lib/operation';\nimport { insertTextAtCursor } from '../lib/input';\nimport { editorStyle } from './Editor';\nimport { ScrollHandle } from './ScrollHandle';\n\ntype FormulaBarProps = {\n ready: boolean;\n};\n\nexport const FormulaBar = ({ ready }: FormulaBarProps) => {\n const { store, dispatch } = useContext(Context);\n const [before, setBefore] = useState('');\n const {\n choosing,\n editorRef,\n largeEditorRef,\n tableReactive: tableRef,\n inputting,\n editingAddress: editingCell,\n } = store;\n const table = tableRef.current;\n const hlRef = useRef<HTMLDivElement | null>(null);\n\n const address = choosing.x === -1 ? '' : p2a(choosing);\n const cell = table?.getCellByPoint(choosing, 'SYSTEM');\n useEffect(() => {\n if (!table) {\n return;\n }\n let value = table.getCellByPoint(choosing, 'SYSTEM')?.value ?? '';\n // debug to remove this line\n value = table.stringify({ point: choosing, cell: { ...cell, value }, refEvaluation: 'RAW' });\n largeEditorRef.current!.value = value;\n setBefore(value as string);\n }, [address, table]);\n\n const writeCell = useCallback(\n (value: string) => {\n if (before !== value) {\n dispatch(write({ value }));\n }\n dispatch(setEditingAddress(''));\n editorRef.current!.focus();\n },\n [before],\n );\n\n useEffect(() => {\n const observer = new ResizeObserver((entries) => {\n entries.forEach(updateScroll);\n });\n if (largeEditorRef.current) {\n observer.observe(largeEditorRef.current);\n }\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const largeInput = largeEditorRef.current;\n\n const handleInput = useCallback((e: KeyboardEvent<HTMLTextAreaElement>) => {\n dispatch(setInputting(e.currentTarget.value));\n }, []);\n\n const updateScroll = useCallback(() => {\n if (!hlRef.current || !largeEditorRef.current) {\n return;\n }\n hlRef.current.style.height = `${largeEditorRef.current.clientHeight}px`;\n hlRef.current.scrollLeft = largeEditorRef.current.scrollLeft;\n hlRef.current.scrollTop = largeEditorRef.current.scrollTop;\n }, []);\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n if (!largeInput || !table) {\n return;\n }\n dispatch(setEditingAddress(address));\n table.wire.lastFocused = e.currentTarget;\n },\n [largeInput, address, table],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n if (e.currentTarget.value!.startsWith('=')) {\n return true;\n } else {\n if (editingCell) {\n writeCell(e.currentTarget.value);\n }\n }\n },\n [editingCell, writeCell],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.ctrlKey || !table) {\n return true;\n }\n const input = e.currentTarget;\n\n switch (e.key) {\n case 'Enter': {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n } else {\n writeCell(input.value);\n dispatch(setInputting(''));\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n }\n break;\n }\n case 'Escape': {\n input.value = before;\n dispatch(setInputting(before));\n dispatch(setEditingAddress(''));\n e.preventDefault();\n editorRef.current!.focus();\n\n break;\n }\n case 'a': // A\n if (e.ctrlKey || e.metaKey) {\n return true;\n }\n case 'c': // C\n if (e.ctrlKey || e.metaKey) {\n return true;\n }\n break;\n case 'v': // V\n if (e.ctrlKey || e.metaKey) {\n return true;\n }\n break;\n }\n\n const cell = table.getCellByPoint(choosing, 'SYSTEM');\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n e.preventDefault();\n }\n updateScroll();\n return false;\n },\n [table, choosing, before, writeCell, updateScroll],\n );\n\n const style: React.CSSProperties = ready ? {} : { visibility: 'hidden' };\n if (!table) {\n return (\n <label className=\"gs-formula-bar gs-hidden\" style={style}>\n <div className=\"gs-selecting-address\"></div>\n <div className=\"gs-fx\">Fx</div>\n <div className=\"gs-formula-bar-editor-inner\">\n <textarea />\n </div>\n </label>\n );\n }\n return (\n <label className=\"gs-formula-bar\" data-sheet-id={store.sheetId} style={style}>\n <ScrollHandle style={{ position: 'absolute', left: 0, top: 0, zIndex: 2 }} vertical={-1} />\n <div className=\"gs-selecting-address\">{address}</div>\n <div className=\"gs-fx\">Fx</div>\n <div className=\"gs-formula-bar-editor-inner\">\n <div\n className=\"gs-editor-hl\"\n ref={hlRef}\n style={{\n height: largeEditorRef.current?.clientHeight,\n width: '100%',\n }}\n >\n {cell?.disableFormula ? inputting : editorStyle(inputting)}\n </div>\n <textarea\n name=\"gs-formula-bar-editor\"\n data-sheet-id={store.sheetId}\n data-size=\"large\"\n rows={1}\n spellCheck={false}\n ref={largeEditorRef}\n value={inputting}\n onInput={handleInput}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onKeyUp={updateScroll}\n onScroll={updateScroll}\n ></textarea>\n </div>\n </label>\n );\n};\n","import type { ReactNode, CSSProperties } from 'react';\n\nexport interface IconProps {\n style?: CSSProperties;\n color?: string;\n size?: number;\n}\n\ninterface BaseProps extends IconProps {\n children?: ReactNode;\n}\n\n// https://tabler.io/icons\n\nexport const Base = ({ style, size = 24, children }: BaseProps) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox={`0 0 24 24`}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={style}\n className=\"icon-tabler\"\n >\n {children}\n </svg>\n );\n};\n","import { type IconProps, Base } from './Base';\n\n// https://tabler.io/icons\n\nexport const SearchIcon = ({ style, color = 'none', size = 24 }: IconProps) => {\n return (\n <Base style={style} size={size}>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill={color} />\n <path d=\"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0\" fill={color} />\n <path d=\"M21 21l-6 -6\" fill={color} />\n </Base>\n );\n};\n","import { type IconProps, Base } from './Base';\n\n// https://tabler.io/icons\n\nexport const CloseIcon = ({ style, color = 'none', size = 24 }: IconProps) => {\n return (\n <Base style={style} size={size}>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill={color} />\n <path d=\"M18 6l-12 12\" fill={color} />\n <path d=\"M6 6l12 12\" fill={color} />\n </Base>\n );\n};\n","import { useContext, useEffect, useRef, useCallback } from 'react';\n\nimport { a2p } from '../lib/converters';\n\nimport { Context } from '../store';\nimport { setSearchQuery, search, setSearchCaseSensitive } from '../store/actions';\nimport { smartScroll } from '../lib/virtualization';\nimport { SearchIcon } from './svg/SearchIcon';\nimport { CloseIcon } from './svg/CloseIcon';\n\nexport const SearchBar = () => {\n const { store, dispatch } = useContext(Context);\n const {\n rootRef,\n editorRef,\n searchInputRef,\n tabularRef,\n searchQuery,\n searchCaseSensitive,\n matchingCellIndex,\n matchingCells,\n tableReactive: tableRef,\n } = store;\n const table = tableRef.current;\n\n const matchingCell = matchingCells[matchingCellIndex];\n useEffect(() => {\n if (!matchingCell || !table) {\n return;\n }\n const point = a2p(matchingCell);\n if (typeof point === 'undefined') {\n return;\n }\n smartScroll(table, tabularRef.current, point);\n }, [searchQuery, matchingCellIndex, searchCaseSensitive, table, tabularRef]);\n\n const handleProgressClick = useCallback((e: React.MouseEvent) => {\n const input = e.currentTarget.previousSibling as HTMLInputElement;\n input?.nodeName === 'INPUT' && input.focus();\n }, []);\n\n const handleSearchClick = useCallback(() => {\n dispatch(search(1));\n }, []);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n dispatch(setSearchQuery(e.currentTarget.value));\n }, []);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Escape') {\n const el = editorRef?.current;\n if (el) {\n el.focus();\n }\n dispatch(setSearchQuery(undefined));\n }\n if (e.key === 'f' && (e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n return false;\n }\n if (e.key === 'Enter') {\n dispatch(search(e.shiftKey ? -1 : 1));\n e.preventDefault();\n return false;\n }\n return true;\n },\n [editorRef],\n );\n\n const handleCaseSensitiveClick = useCallback(() => {\n dispatch(setSearchCaseSensitive(!searchCaseSensitive));\n }, [searchCaseSensitive]);\n\n const handleCloseClick = useCallback(() => {\n dispatch(setSearchQuery(undefined));\n editorRef.current?.focus();\n }, [editorRef]);\n\n if (typeof searchQuery === 'undefined') {\n return null;\n }\n if (rootRef.current === null) {\n return null;\n }\n return (\n <label className={`gs-search-bar ${matchingCells.length > 0 ? 'gs-search-found' : ''}`}>\n <div className=\"gs-search-progress\" onClick={handleProgressClick}>\n {matchingCells.length === 0 ? 0 : matchingCellIndex + 1} / {matchingCells.length}\n </div>\n <div className=\"gs-search-bar-icon\" onClick={handleSearchClick}>\n <SearchIcon style={{ verticalAlign: 'middle', marginLeft: '5px' }} />\n </div>\n <textarea ref={searchInputRef} value={searchQuery} onChange={handleChange} onKeyDown={handleKeyDown}></textarea>\n <div className={`gs-search-casesensitive`}>\n <span\n className={`${searchCaseSensitive ? 'gs-search-casesensitive-on' : ''}`}\n onClick={handleCaseSensitiveClick}\n >\n Aa\n </span>\n </div>\n <a className=\"gs-search-close\" onClick={handleCloseClick}>\n <CloseIcon style={{ verticalAlign: 'middle' }} />\n </a>\n </label>\n );\n};\n","import { useEffect, useState, useRef, useReducer, createRef } from 'react';\nimport type { CellsByAddressType, Connector, OptionsType, Props, StoreType } from '../types';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, HEADER_HEIGHT, HEADER_WIDTH, SHEET_HEIGHT, SHEET_WIDTH } from '../constants';\nimport { Context } from '../store';\nimport { reducer as defaultReducer } from '../store/actions';\nimport { Editor } from './Editor';\nimport { StoreObserver } from './StoreObserver';\nimport { Resizer } from './Resizer';\nimport { Emitter } from './Emitter';\nimport { ContextMenu, defaultContextMenuItems } from './ContextMenu';\nimport { Table } from '../lib/table';\nimport { Tabular } from './Tabular';\nimport { getMaxSizesFromCells } from '../lib/structs';\nimport { x2c, y2r } from '../lib/converters';\nimport { embedStyle } from '../styles/embedder';\nimport { FormulaBar } from './FormulaBar';\nimport { SearchBar } from './SearchBar';\nimport { useHub } from '../lib/hub';\nimport { ScrollHandle } from './ScrollHandle';\n\nexport const createConnector = () => createRef<Connector | null>();\nexport const useConnector = () => useRef<Connector | null>(null);\n\nexport function GridSheet({\n initialCells,\n sheetName = '',\n connector: initialConnector,\n options = {},\n className,\n style,\n hub: initialHub,\n}: Props) {\n const { sheetResize, showFormulaBar = true, mode = 'light' } = options;\n const rootRef = useRef<HTMLDivElement>(null);\n const mainRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLTextAreaElement>(null);\n const editorRef = useRef<HTMLTextAreaElement>(null);\n const largeEditorRef = useRef<HTMLTextAreaElement>(null);\n const tabularRef = useRef<HTMLDivElement>(null);\n\n const internalConnector = useConnector();\n const connector = initialConnector ?? internalConnector;\n\n const internalHub = useHub({});\n const hub = initialHub ?? internalHub;\n const { wire } = hub;\n\n // useRef to manage sheetId and avoid Strict Mode issues\n const sheetIdRef = useRef<number | null>(null);\n if (sheetIdRef.current === null) {\n sheetIdRef.current = ++wire.sheetHead;\n }\n const sheetId = sheetIdRef.current;\n\n // Initialize tableReactive\n const tableReactive = useRef<Table | null>(null);\n\n const [initialState] = useState<StoreType>(() => {\n if (!sheetName) {\n sheetName = `Sheet${sheetId}`;\n console.debug('GridSheet: sheetName is not provided, using default name:', sheetName);\n }\n const { minNumRows, maxNumRows, minNumCols, maxNumCols, contextMenuItems } = options;\n const table = new Table({\n minNumRows,\n maxNumRows,\n minNumCols,\n maxNumCols,\n sheetName,\n hub: wire,\n });\n table.sheetId = sheetId;\n wire.sheetIdsByName[sheetName] = sheetId;\n\n table.initialize(initialCells);\n wire.onInit?.({ table });\n\n tableReactive.current = table;\n\n const store: StoreType = {\n sheetId,\n tableReactive,\n rootRef,\n mainRef,\n searchInputRef,\n editorRef,\n largeEditorRef,\n tabularRef,\n choosing: { y: 1, x: 1 },\n inputting: '',\n selectingZone: { startY: 1, startX: 1, endY: -1, endX: -1 },\n autofillDraggingTo: null,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n editingAddress: '',\n editorRect: { y: 0, x: 0, height: 0, width: 0 },\n dragging: false,\n sheetHeight: 0,\n sheetWidth: 0,\n entering: false,\n matchingCells: [],\n matchingCellIndex: 0,\n searchCaseSensitive: false,\n editingOnEnter: true,\n showAddress: true,\n contextMenuPosition: { y: -1, x: -1 },\n contextMenuItems: contextMenuItems ?? defaultContextMenuItems,\n resizingPositionY: [-1, -1, -1],\n resizingPositionX: [-1, -1, -1],\n minNumRows: 1,\n maxNumRows: -1,\n minNumCols: 1,\n maxNumCols: -1,\n mode: 'light',\n ...table.getTotalSize(),\n };\n return store;\n });\n\n type ReducerWithoutAction<S> = (prevState: S) => S;\n\n const [store, dispatch] = useReducer(\n defaultReducer as unknown as ReducerWithoutAction<StoreType>,\n initialState,\n () => initialState,\n );\n\n useEffect(() => {\n embedStyle();\n }, []);\n\n const [sheetHeight, setSheetHeight] = useState(options?.sheetHeight || estimateSheetHeight(initialCells));\n const [sheetWidth, setSheetWidth] = useState(options?.sheetWidth || estimateSheetWidth(initialCells));\n useEffect(() => {\n const intervalId = window.setInterval(() => {\n setSheetHeight(mainRef.current?.clientHeight || 0);\n setSheetWidth(mainRef.current?.clientWidth || 0);\n }, 1000);\n return () => window.clearInterval(intervalId);\n }, []);\n useEffect(() => {\n if (options.sheetHeight) {\n setSheetHeight(options.sheetHeight);\n }\n }, [options.sheetHeight]);\n useEffect(() => {\n if (options.sheetWidth) {\n setSheetWidth(options.sheetWidth);\n }\n }, [options.sheetWidth]);\n\n return (\n <Context.Provider value={{ store, dispatch }}>\n <div\n className={`gs-root1 ${wire.ready ? 'gs-initialized' : ''}`}\n ref={rootRef}\n data-sheet-name={sheetName}\n data-mode={mode}\n >\n <ScrollHandle style={{ position: 'fixed', top: 0, left: 0 }} />\n <ScrollHandle style={{ position: 'absolute', zIndex: 4, right: 0, top: 0, width: 5 }} horizontal={1} />\n <ScrollHandle style={{ position: 'absolute', zIndex: 4, left: 0, bottom: 0, height: 5 }} vertical={1} />\n\n {typeof store.searchQuery === 'undefined' ? showFormulaBar && <FormulaBar ready={wire.ready} /> : <SearchBar />}\n <div\n className={`gs-main ${className || ''}`}\n ref={mainRef}\n style={{\n //width: '100%',\n maxWidth: (store.totalWidth || 0) + 2,\n maxHeight: (store.totalHeight || 0) + 2,\n overflow: 'auto',\n resize: sheetResize,\n ...style,\n }}\n >\n <Editor mode={mode} />\n <Tabular />\n <StoreObserver {...{ ...options, sheetHeight, sheetWidth, sheetName, connector }} />\n <ContextMenu />\n <Resizer />\n <Emitter />\n </div>\n </div>\n </Context.Provider>\n );\n}\n\nconst estimateSheetHeight = (initialCells: CellsByAddressType) => {\n const auto = getMaxSizesFromCells(initialCells);\n let estimatedHeight = initialCells[0]?.height ?? HEADER_HEIGHT;\n for (let y = 0; y < auto.numRows; y++) {\n const row = y2r(y);\n const height = initialCells?.[row]?.height || initialCells?.default?.height || DEFAULT_HEIGHT;\n if (estimatedHeight + height > SHEET_HEIGHT) {\n return SHEET_HEIGHT;\n }\n estimatedHeight += height;\n }\n return estimatedHeight + 3;\n};\n\nconst estimateSheetWidth = (initialCells: CellsByAddressType) => {\n const auto = getMaxSizesFromCells(initialCells);\n let estimatedWidth = initialCells[0]?.width ?? HEADER_WIDTH;\n for (let x = 0; x < auto.numCols; x++) {\n const col = x2c(x);\n const width = initialCells?.[col]?.width || initialCells?.default?.width || DEFAULT_WIDTH;\n if (estimatedWidth + width > SHEET_WIDTH) {\n return SHEET_WIDTH;\n }\n estimatedWidth += width;\n }\n return estimatedWidth + 3;\n};\n","import { RendererMixinType } from './core';\n\nexport const ThousandSeparatorRendererMixin: RendererMixinType = {\n number({ value, cell }): any {\n if (value == null || isNaN(value)) {\n return 'NaN';\n }\n const [int, fraction] = String(value).split('.');\n const result = int.replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,');\n if (fraction == null) {\n return result;\n }\n return `${result}.${fraction}`;\n },\n};\n","import { RenderProps } from './core';\n\nexport const CheckboxRendererMixin = {\n bool({ value, sync, table, point }: RenderProps<boolean>): any {\n return (\n <input\n type=\"checkbox\"\n checked={value}\n onChange={(e) => {\n if (sync) {\n sync(table.write({ point, value: e.currentTarget.checked.toString() }));\n }\n e.currentTarget.blur();\n }}\n />\n );\n },\n};\n","import { CSSProperties } from 'react';\n\ntype BorderStyleValue = string;\n\ninterface BorderOptions {\n /**\n * Border CSS value to apply uniformly to all sides.\n * Individual sides (top, right, etc.) will override this if specified.\n *\n * Example: \"1px solid #000\"\n */\n all?: BorderStyleValue;\n\n /**\n * Border CSS value for the top side.\n *\n * Example: \"2px dashed red\"\n */\n top?: BorderStyleValue;\n\n /**\n * Border CSS value for the right side.\n */\n right?: BorderStyleValue;\n\n /**\n * Border CSS value for the bottom side.\n */\n bottom?: BorderStyleValue;\n\n /**\n * Border CSS value for the left side.\n */\n left?: BorderStyleValue;\n}\n\n/**\n * Generates a CSSProperties object with individual border styles.\n *\n * - If `all` is provided, it applies the same border style to all sides.\n * - If individual sides (top, right, bottom, left) are specified, they override `all`.\n * - Sides that are not specified will be omitted from the result,\n * which avoids unintentionally removing existing border styles during re-renders.\n * - The function does not output the shorthand `border` property, only individual sides.\n *\n * @param options Border configuration options.\n * @returns CSSProperties object with border styles.\n *\n * @example\n * makeBorder({ all: \"1px solid #000\" });\n * // → { borderTop: \"1px solid #000\", borderRight: \"1px solid #000\", borderBottom: \"1px solid #000\", borderLeft: \"1px solid #000\" }\n *\n * @example\n * makeBorder({ top: \"2px dashed red\", left: \"1px solid blue\" });\n * // → { borderTop: \"2px dashed red\", borderLeft: \"1px solid blue\" }\n */\nexport function makeBorder(options: BorderOptions): CSSProperties {\n const result: CSSProperties = {};\n\n const all = options.all;\n\n if (options.top ?? all) {\n result.borderTop = options.top ?? all;\n }\n\n if (options.right ?? all) {\n result.borderRight = options.right ?? all;\n }\n\n if (options.bottom ?? all) {\n result.borderBottom = options.bottom ?? all;\n }\n\n if (options.left ?? all) {\n result.borderLeft = options.left ?? all;\n }\n\n return result;\n}\n"],"names":["range","startRow","endRow","operation","operations","this","t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h","BOOLS","buf","eq","group","tableRef","nextSelectingZone","newTable","prevention.hasOperation","prevention.Write","nextY","nextX","_a","document","currentLine","_b","selected","shiftKey","_c","setStore","table","store","x","endY","height","endX","width","prevention.InsertRowsAbove","prevention.InsertRowsBelow","prevention.InsertColsLeft","prevention.InsertColsRight","prevention.RemoveRows","prevention.RemoveCols","Parser","num","functionsDefault","address","operation.hasOperation","operation.MoveFrom","operation.MoveTo","operation.Copy","operation.Update","operation.Write","operation.Style","operation.Resize","operation.SetRenderer","operation.SetParser","point","operation.RemoveRows","operation.RemoveCols","prevention.Resize","palette","cell","defaultReducer"],"mappings":"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","x_google_ignoreList":[7,26,27]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/constants.ts","../src/store/index.ts","../src/lib/converters.ts","../src/lib/structs.ts","../src/store/helpers.ts","../src/lib/virtualization.ts","../src/lib/operation.ts","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js","../src/formula/evaluator.ts","../src/lib/time.ts","../src/lib/autofill.ts","../src/store/actions.ts","../src/lib/clipboard.ts","../src/lib/sheet.ts","../src/lib/input.ts","../src/lib/palette.ts","../src/components/hooks.ts","../src/components/Fixed.tsx","../src/lib/paste.ts","../src/components/Editor.tsx","../src/components/PluginBase.tsx","../src/components/StoreObserver.tsx","../src/components/Resizer.tsx","../src/components/Emitter.tsx","../src/store/dispatchers.ts","../src/components/ContextMenu.tsx","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/utc.js","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/timezone.js","../src/parsers/core.ts","../src/formula/solver.ts","../src/renderers/core.ts","../src/formula/functions/__base.ts","../src/formula/functions/__utils.ts","../src/formula/functions/add.ts","../src/formula/functions/minus.ts","../src/formula/functions/multiply.ts","../src/formula/functions/divide.ts","../src/formula/functions/mod.ts","../src/formula/functions/sum.ts","../src/formula/functions/concat.ts","../src/formula/functions/concatenate.ts","../src/formula/functions/eq.ts","../src/formula/functions/ne.ts","../src/formula/functions/gt.ts","../src/formula/functions/gte.ts","../src/formula/functions/lt.ts","../src/formula/functions/lte.ts","../src/formula/functions/now.ts","../src/formula/functions/and.ts","../src/formula/functions/or.ts","../src/formula/functions/if.ts","../src/formula/functions/iferror.ts","../src/formula/functions/not.ts","../src/formula/functions/count.ts","../src/formula/functions/countif.ts","../src/formula/functions/sumif.ts","../src/formula/functions/vlookup.ts","../src/formula/functions/hlookup.ts","../src/formula/functions/index.ts","../src/formula/functions/match.ts","../src/formula/functions/log.ts","../src/formula/functions/log10.ts","../src/formula/functions/ln.ts","../src/formula/functions/abs.ts","../src/formula/functions/product.ts","../src/formula/functions/rand.ts","../src/formula/functions/pi.ts","../src/formula/functions/exp.ts","../src/formula/functions/radians.ts","../src/formula/functions/power.ts","../src/formula/functions/sqrt.ts","../src/formula/functions/round.ts","../src/formula/functions/roundup.ts","../src/formula/functions/rounddown.ts","../src/formula/functions/sin.ts","../src/formula/functions/cos.ts","../src/formula/functions/tan.ts","../src/formula/functions/asin.ts","../src/formula/functions/acos.ts","../src/formula/functions/atan.ts","../src/formula/functions/atan2.ts","../src/formula/functions/counta.ts","../src/formula/functions/average.ts","../src/formula/functions/max.ts","../src/formula/functions/min.ts","../src/formula/functions/len.ts","../src/formula/functions/lenb.ts","../src/formula/functions/uminus.ts","../src/formula/functions/row.ts","../src/formula/functions/col.ts","../src/formula/mapping.ts","../src/lib/hub.ts","../src/policy/core.ts","../src/lib/reference.ts","../src/lib/table.ts","../src/lib/events.ts","../src/components/Cell.tsx","../src/components/ScrollHandle.tsx","../src/components/HeaderCellTop.tsx","../src/components/HeaderCellLeft.tsx","../src/components/CellStateOverlay.tsx","../src/components/Tabular.tsx","../src/styles/minified.ts","../src/styles/embedder.ts","../src/components/FormulaBar.tsx","../src/components/svg/Base.tsx","../src/components/svg/SearchIcon.tsx","../src/components/svg/CloseIcon.tsx","../src/components/SearchBar.tsx","../src/components/GridSheet.tsx","../src/renderers/thousand_separator.ts","../src/renderers/checkbox.tsx","../src/styles/utils.ts"],"sourcesContent":["import type { ZoneType } from './types';\n\nexport const DEFAULT_HISTORY_LIMIT = 20;\n\nexport const DEFAULT_HEIGHT = 24;\nexport const DEFAULT_WIDTH = 90;\n\nexport const SHEET_HEIGHT = 500;\nexport const SHEET_WIDTH = 1000;\n\nexport const HEADER_HEIGHT = 24;\nexport const HEADER_WIDTH = 50;\n\nexport const MIN_WIDTH = 5;\nexport const MIN_HEIGHT = 5;\n\nexport const OVERSCAN_X = 5;\nexport const OVERSCAN_Y = 10;\n\nexport const DEFAULT_ALPHABET_CACHE_SIZE = 1000;\n\nexport class Special {\n public name: string;\n constructor(name: string) {\n this.name = name;\n }\n}\n\nexport const SECONDS_IN_DAY = 86400;\nexport const FULLDATE_FORMAT_UTC = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n\nexport const RESET_ZONE: ZoneType = {\n startY: -1,\n startX: -1,\n endY: -1,\n endX: -1,\n};\n","import { createContext } from 'react';\nimport { StoreType } from '../types';\n\nexport type Dispatcher = React.Dispatch<{\n type: number;\n value: any;\n}>;\n\nexport const Context = createContext(\n {} as {\n store: StoreType;\n dispatch: Dispatcher;\n },\n);\n","import type { Address, PointType, ExtraPointType } from '../types';\nimport { DEFAULT_ALPHABET_CACHE_SIZE } from '../constants';\n\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\nconst N2C_CACHE = new Map<number, string>();\nconst C2N_CACHE = new Map<string, number>();\n\nconst getColumnLetterFromNumber = (key: number, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE): string => {\n const cached = N2C_CACHE.get(--key);\n if (cached != null) {\n return cached;\n }\n if (key === 0) {\n return '';\n }\n let num = key;\n let result = '';\n do {\n result = ALPHABET[--num % 26] + result;\n num = Math.floor(num / 26);\n } while (num > 0);\n\n N2C_CACHE.set(key, result);\n const it = N2C_CACHE.keys();\n for (let st = it.next(); N2C_CACHE.size > cacheSize; st = it.next()) {\n // @ts-ignore\n N2C_CACHE.delete(st.value);\n }\n return result;\n};\n\nconst getNumberFromColumnLetter = (key: string, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE): number => {\n const cached = C2N_CACHE.get(key);\n if (cached != null) {\n return cached;\n }\n if (key === '') {\n return 0;\n }\n const alpha = key;\n let result = 0;\n for (let digit = 0; digit < alpha.length; digit++) {\n const a = alpha[alpha.length - digit - 1];\n const num = ALPHABET.indexOf(a) + 1;\n result += ALPHABET.length ** digit * num;\n }\n C2N_CACHE.set(key, result);\n const it = C2N_CACHE.keys();\n for (let st = it.next(); C2N_CACHE.size > cacheSize; st = it.next()) {\n // @ts-ignore\n C2N_CACHE.delete(st.value);\n }\n return result;\n};\n\nexport const x2c = (x: number): string => {\n if (x === 0) {\n return '';\n }\n const c = getColumnLetterFromNumber(x + 1);\n return x < 0 ? `$${c}` : c;\n};\n\nexport const c2x = (col: string, absolute = false): number => {\n const n = getNumberFromColumnLetter(col);\n return absolute ? -n : n;\n};\n\nexport const y2r = (y: number) => {\n if (y === 0) {\n return '';\n }\n return y < 0 ? `$${y}` : String(y);\n};\n\nexport const r2y = (row: number | string, absolute = false) => {\n if (typeof row === 'string') {\n row = parseInt(row, 10);\n }\n return absolute ? -row : row;\n};\n\nexport const p2a = ({ y, x, absX, absY }: ExtraPointType) => {\n if (x === 0 && y === 0) {\n return '0';\n }\n if (x === -1 && y === -1) {\n return '?';\n }\n return `${absX ? '$' : ''}${x2c(x)}${absY ? '$' : ''}${y2r(y)}`;\n};\n\nexport const a2p = (address: Address): ExtraPointType => {\n const m = address.match(/(\\$)?([A-Z]*)(\\$)?([0-9]*)/);\n if (m == null) {\n console.error('invalid address', address);\n return { y: -1, x: -1 };\n }\n const [, _absX, col, _absY, row] = m.slice();\n const [absX, absY] = [_absX != null, _absY != null];\n if (col === '' && row === '') {\n return { y: -1, x: -1, absX: false, absY: false };\n }\n return { y: r2y(row) || 0, x: c2x(col) || 0, absX, absY };\n};\n\nexport const grantAddressAbsolute = (address: Address, absCol: boolean, absRow: boolean) => {\n const m = address.match(/([A-Z]*)([0-9]*)/);\n if (m == null) {\n return;\n }\n const [, col, row] = m.slice();\n return `${absCol ? '$' : ''}${col}${absRow ? '$' : ''}${row}`;\n};\n\nexport const stripAddressAbsolute = (address: Address) => {\n return address.replace(/\\$/g, '');\n};\n","import type {\n MatrixType,\n AreaType,\n ZoneType,\n RangeType,\n PointType,\n Y,\n X,\n CellsByAddressType,\n ShapeType,\n MatricesByAddress,\n CellType,\n Address,\n} from '../types';\nimport { a2p, p2a, x2c, c2x } from './converters';\n\nexport const slideArea = (area: AreaType, y: Y, x: X): AreaType => {\n const { top, left, bottom, right } = area;\n return { top: top + y, left: left + x, bottom: bottom + y, right: right + x };\n};\n\nexport const superposeArea = (srcArea: AreaType, dstArea: AreaType): ShapeType => {\n const { height: srcHeight, width: srcWidth } = areaShape(srcArea);\n const { height: dstHeight, width: dstWidth } = areaShape(dstArea);\n\n // biggerHeight, biggerWidth\n return {\n height: srcHeight > dstHeight ? srcHeight : dstHeight,\n width: srcWidth > dstWidth ? srcWidth : dstWidth,\n };\n};\n\nexport const concatAreas = (area1: AreaType, area2: AreaType): AreaType => {\n const result: AreaType = { ...area1 };\n if (area2.left < area1.left) {\n result.left = area2.left;\n }\n if (area2.right > area1.right) {\n result.right = area2.right;\n }\n if (area2.top < area1.top) {\n result.top = area2.top;\n }\n if (area2.bottom > area1.bottom) {\n result.bottom = area2.bottom;\n }\n return result;\n};\n\nexport const zoneToArea = (zone: ZoneType): AreaType => {\n if (zone.endY === -1 || zone.endX === -1) {\n return { top: -1, left: -1, bottom: -1, right: -1 };\n }\n const [top, bottom] = zone.startY < zone.endY ? [zone.startY, zone.endY] : [zone.endY, zone.startY];\n const [left, right] = zone.startX < zone.endX ? [zone.startX, zone.endX] : [zone.endX, zone.startX];\n return { top, left, bottom, right };\n};\n\nexport const areaToZone = (area: AreaType): ZoneType => {\n return {\n startY: area.top,\n startX: area.left,\n endY: area.bottom,\n endX: area.right,\n };\n};\n\nexport const areaToRange = (area: AreaType): string => {\n const { top, left, bottom, right } = area;\n if (top === bottom && left === right) {\n return p2a({ y: top, x: left });\n }\n const leftTop = p2a({ y: top, x: left });\n const rightBottom = p2a({ y: bottom, x: right });\n return `${leftTop}:${rightBottom}`;\n};\n\nexport const between = (range: RangeType, index: number) => {\n if (range.start === -1 || range.end === -1) {\n return false;\n }\n return (range.start <= index && index <= range.end) || (range.end <= index && index <= range.start);\n};\n\nexport const among = (area: AreaType, point: PointType) => {\n if (area.top === -1 || area.left === -1 || area.bottom === -1 || area.right === -1) {\n return false;\n }\n const { y, x } = point;\n const { top, left, bottom, right } = area;\n return top <= y && y <= bottom && left <= x && x <= right;\n};\n\ntype ShapeExtension = { base?: number };\n\nexport const zoneShape = ({ base = 0, ...zone }: ZoneType & ShapeExtension): ShapeType => {\n if (zone.endY === -1 || zone.endX === -1) {\n return { height: 1, width: 1 };\n }\n return {\n height: base + Math.abs(zone.startY - zone.endY),\n width: base + Math.abs(zone.startX - zone.endX),\n };\n};\n\nexport const areaShape = ({ base = 0, ...area }: AreaType & ShapeExtension): ShapeType => {\n return {\n height: base + Math.abs(area.top - area.bottom),\n width: base + Math.abs(area.left - area.right),\n };\n};\n\nexport const matrixShape = ({ base = 0, matrix }: { matrix: MatrixType } & ShapeExtension): ShapeType => {\n const h = matrix.length;\n if (h === 0) {\n return { height: 0, width: 0 };\n }\n return { height: base + h, width: base + matrix[0].length };\n};\n\nexport const makeSequence = (start: number, stop: number, step: number = 1) => {\n return Array.from({ length: (stop - start - 1) / step + 1 }, (_, i) => start + i * step);\n};\n\nexport const oa2aa = (oa: { [s: string]: any }[], fields: string[]): MatrixType => {\n const aa: any[][] = [];\n oa.forEach((o) => {\n const a: any[] = [];\n fields.forEach((field) => {\n a.push(o[field]);\n });\n aa.push(a);\n });\n return aa;\n};\n\nexport const aa2oa = (aa: MatrixType, fields: string[]): { [s: string]: any }[] => {\n const oa: { [s: string]: any }[] = [];\n aa.forEach((a) => {\n const o: { [s: string]: any } = {};\n a.forEach((v, i) => {\n if (i >= fields.length) {\n return;\n }\n const field = fields[i];\n o[field] = v;\n });\n oa.push(o);\n });\n return oa;\n};\n\ntype PutMatrixFilterProps<T = any> = {\n srcValue: T;\n dstValue: T;\n srcPoint: PointType;\n dstPoint: PointType;\n};\n\nexport const putMatrix = <T = any>(\n dst: T[][],\n src: T[][],\n dstArea: AreaType,\n filter: (arg: PutMatrixFilterProps) => boolean = () => true,\n) => {\n const lostRows: MatricesByAddress<T> = {};\n const { top, left, bottom, right } = dstArea;\n const { height: dstNumRows, width: dstNumCols } = matrixShape({\n matrix: dst,\n base: 1,\n });\n for (let y = top; y <= bottom; y++) {\n const lostRow: T[] = [];\n for (let x = left; x <= right; x++) {\n const srcPoint = { y: y - top, x: x - left };\n const dstPoint = { y, x };\n const value = src[y - top][x - left];\n // -1 means excluding headers\n if (y < dstNumRows - 1 && x < dstNumCols - 1) {\n if (filter({ srcValue: value, dstValue: dst[y][x], srcPoint, dstPoint })) {\n dst[y][x] = value;\n }\n continue;\n }\n if (lostRow.length === 0) {\n lostRows[p2a(dstPoint)] = [lostRow];\n }\n lostRow.push(value);\n }\n }\n return lostRows;\n};\n\nexport const createMatrix = <T = any>(numRows: number, numCols: number, fill?: T): T[][] => {\n return [...Array(numRows)].map(() => Array(numCols).fill(fill));\n};\n\nexport const cropMatrix = <T = any>(matrix: T[][], area: AreaType): T[][] => {\n const { top, left, bottom, right } = area;\n return matrix.slice(top, bottom + 1).map((cols) => cols.slice(left, right + 1));\n};\n\nexport const buildInitialCellsFromOrigin = ({\n cells = {},\n ensured = {},\n matrix = [],\n flattenAs = 'value',\n origin = 'A1',\n}: {\n cells?: CellsByAddressType;\n ensured?: {\n numRows?: number;\n numCols?: number;\n };\n flattenAs?: keyof CellType;\n matrix?: MatrixType;\n origin?: Address;\n}) => {\n return buildInitialCells({\n cells,\n ensured,\n matrices: { [origin]: matrix },\n flattenAs,\n });\n};\n\nexport const buildInitialCells = ({\n cells = {},\n ensured = {},\n matrices = {},\n flattenAs = 'value',\n}: {\n cells?: CellsByAddressType;\n ensured?: {\n numRows?: number;\n numCols?: number;\n };\n flattenAs?: keyof CellType;\n matrices?: MatricesByAddress<any>;\n} = {}) => {\n buildCells({ cells, flattenAs, matrices });\n const { numRows, numCols } = Object.assign({ numRows: 1, numCols: 1 }, ensured);\n const rightBottom = p2a({ y: numRows, x: numCols });\n if (cells[rightBottom] == null) {\n cells[rightBottom] = {};\n }\n return cells;\n};\n\nexport const buildCells = <T>({\n cells = {},\n matrices = {},\n flattenAs,\n}: {\n cells?: CellsByAddressType;\n flattenAs?: keyof CellType;\n matrices?: MatricesByAddress<T>;\n}) => {\n Object.keys(matrices).forEach((baseAddress) => {\n const matrix = matrices[baseAddress];\n const { y: baseY, x: baseX } = a2p(baseAddress);\n matrix.forEach((row, y) => {\n row.forEach((e, x) => {\n const id = p2a({ y: baseY + y, x: baseX + x });\n if (flattenAs) {\n const cell = cells[id];\n cells[id] = { [flattenAs]: e, ...cell };\n } else {\n cells[id] = e as CellType;\n }\n });\n });\n });\n return cells;\n};\n\nexport const getMaxSizesFromCells = (cells: CellsByAddressType = {}) => {\n let [lastY, lastX] = [0, 0];\n Object.keys(cells).map((address) => {\n const { y, x } = a2p(address);\n if (lastY < y) {\n lastY = y;\n }\n if (lastX < x) {\n lastX = x;\n }\n });\n return { numRows: lastY, numCols: lastX };\n};\n\nexport const range = (start: number, end: number) => {\n const list: number[] = [];\n for (let i = start; i <= end; i++) {\n list.push(i);\n }\n return list;\n};\n\nexport const complementSelectingArea = (selectingArea: AreaType, choosing: PointType) => {\n if (selectingArea.left === -1) {\n selectingArea = {\n left: choosing.x,\n top: choosing.y,\n right: choosing.x,\n bottom: choosing.y,\n };\n }\n return selectingArea;\n};\n\nexport const isSameArea = (area1: AreaType, area2: AreaType) => {\n if (area1.top !== area2.top) {\n return false;\n }\n if (area1.left !== area2.left) {\n return false;\n }\n if (area1.bottom !== area2.bottom) {\n return false;\n }\n if (area1.right !== area2.right) {\n return false;\n }\n return true;\n};\n\nexport const expandRange = (range: string): Address[] => {\n if (range.indexOf(':') === -1) {\n return [range];\n }\n\n const result: Address[] = [];\n\n const isRowRange = /^\\d+\\:\\d+$/.test(range);\n\n if (isRowRange) {\n const [startRow, endRow] = range.split(':').map(Number);\n for (let row = startRow; row <= endRow; row++) {\n result.push(`${row}`);\n }\n return result;\n }\n\n const match = range.match(/^([A-Z]*)(\\d+)?\\:([A-Z]*)(\\d+)?$/);\n if (!match) {\n console.error('Invalid range format', range);\n return [range];\n }\n\n const [, startCol, startRow, endCol, endRow] = match;\n const startColIndex = startCol ? c2x(startCol) : 1;\n const endColIndex = endCol ? c2x(endCol) : 1;\n\n for (let col = startColIndex; col <= endColIndex; col++) {\n const currentColumn = startCol || endCol ? x2c(col) : '';\n if (startRow && endRow) {\n for (let row = Number(startRow); row <= Number(endRow); row++) {\n result.push(`${currentColumn}${row}`);\n }\n } else if (!startRow && !endRow) {\n result.push(currentColumn);\n }\n }\n return result;\n};\n\n// restrictZone resets a zone if the zone consists of a single cell.\nexport const restrictZone = (zone: ZoneType): ZoneType => {\n const s = zoneShape(zone);\n if (s.height + s.width === 0) {\n return { startY: -1, startX: -1, endY: -1, endX: -1 };\n }\n return { ...zone };\n};\n\nexport type BinarySearchPredicate = (mid: number) => boolean;\n\nexport const binarySearch = (\n low: number,\n high: number,\n predicate: BinarySearchPredicate,\n lessThan: boolean,\n): number => {\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n if (predicate(mid)) {\n if (lessThan) {\n high = mid - 1;\n } else {\n low = mid + 1;\n }\n } else {\n if (lessThan) {\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n }\n return lessThan ? low : high;\n};\n\nexport const moveKey = (obj: any, keyFrom: string, keyTo: string): void => {\n const v = obj[keyFrom];\n if (v == null) {\n return;\n }\n delete obj[keyFrom];\n obj[keyTo] = v;\n};\n\nexport const invertObject = (obj: { [key: string]: string }): { [value: string]: string } => {\n const inverted: { [value: string]: string } = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n inverted[obj[key]] = key;\n }\n }\n return inverted;\n};\n","import { a2p, x2c, y2r } from '../lib/converters';\nimport { Table } from '../lib/table';\nimport { Address, PointType, StoreType } from '../types';\n\nexport const restrictPoints = (store: StoreType, table: Table) => {\n const { choosing, selectingZone } = store;\n let { y, x } = choosing;\n let { startY: y1, startX: x1, endY: y2, endX: x2 } = selectingZone;\n let { startY: y3, startX: x3, endY: y4, endX: x4 } = table.wire.copyingZone;\n const [numRows, numCols] = [table.getNumRows(), table.getNumCols()];\n if (y > numRows) {\n y = numRows;\n }\n if (x > numCols) {\n x = numCols;\n }\n if (y1 > numRows) {\n y1 = numRows;\n }\n if (y2 > numRows) {\n y2 = numRows;\n }\n if (x1 > numCols) {\n x1 = numCols;\n }\n if (x2 > numCols) {\n x2 = numCols;\n }\n if (y3 > numRows) {\n y3 = numRows;\n }\n if (y4 > numRows) {\n y4 = numRows;\n }\n if (x3 > numCols) {\n x3 = numCols;\n }\n if (x4 > numCols) {\n x4 = numCols;\n }\n return {\n choosing: { y, x } as PointType,\n selectingZone: { startY: y1, startX: x1, endY: y2, endX: x2 },\n copyingZone: { startY: y3, startX: x3, endY: y4, endX: x4 },\n };\n};\n\nexport const shouldTracking = (operation: string) => {\n switch (operation) {\n case 'INSERT_ROWS':\n return true;\n case 'INSERT_COLS':\n return true;\n case 'REMOVE_ROWS':\n return true;\n case 'REMOVE_COLS':\n return true;\n case 'MOVE':\n return true;\n }\n return false;\n};\n\nexport const initSearchStatement = (table: Table, store: StoreType) => {\n const { searchQuery, searchCaseSensitive } = store;\n let { choosing } = store;\n if (!searchQuery) {\n return { matchingCells: [] };\n }\n const matchingCells: Address[] = [];\n for (let y = 1; y <= table.bottom; y++) {\n for (let x = 1; x <= table.right; x++) {\n const v = table.stringify({ point: { y, x } });\n const s = searchCaseSensitive ? v : v.toLowerCase();\n const q = searchCaseSensitive ? searchQuery : searchQuery.toLowerCase();\n if (s.indexOf(q) !== -1) {\n matchingCells.push(`${x2c(x)}${y2r(y)}`);\n }\n }\n }\n const matchingCellIndex = matchingCells.length === store.matchingCells.length ? store.matchingCellIndex : 0;\n if (matchingCells.length > 0) {\n const address = matchingCells[matchingCellIndex];\n choosing = a2p(address);\n }\n return { matchingCells, searchQuery, matchingCellIndex, choosing };\n};\n\nexport const isXSheetFocused = (store: StoreType) => {\n const { sheetId, tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return false;\n }\n if (sheetId === table.wire.editingSheetId) {\n return false;\n }\n return !!table.wire.editingAddress;\n};\n","import { DEFAULT_HEIGHT, DEFAULT_WIDTH, OVERSCAN_X, OVERSCAN_Y } from '../constants';\nimport { range, binarySearch, type BinarySearchPredicate } from './structs';\nimport { Table } from './table';\nimport type { AreaType, PointType, Virtualization } from '../types';\n\nexport const getCellRectPositions = (table: Table, { y, x }: PointType) => {\n // Use System.offsetLeft / offsetTop stored on header cells for O(1) lookup\n const colCell = table.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const rowCell = table.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const left = colCell?.system?.offsetLeft ?? 0;\n const top = rowCell?.system?.offsetTop ?? 0;\n const w = colCell?.width || DEFAULT_WIDTH;\n const h = rowCell?.height || DEFAULT_HEIGHT;\n return {\n top,\n left,\n bottom: top + h,\n right: left + w,\n width: w,\n height: h,\n };\n};\n\nexport const getScreenRect = (e: HTMLDivElement) => {\n const top = e.scrollTop,\n left = e.scrollLeft;\n const height = e.offsetHeight,\n width = e.offsetWidth;\n const bottom = top + height,\n right = left + width;\n return { top, left, bottom, right, height, width };\n};\n\nexport const virtualize = (table: Table, e: HTMLDivElement | null): Virtualization | null => {\n if (e == null) {\n return null;\n }\n let boundaryTop = 0,\n boundaryLeft = 0,\n boundaryBottom = table.getNumRows(),\n boundaryRight = table.getNumCols();\n\n const { top, left, bottom, right } = getScreenRect(e);\n let width = 0,\n height = 0;\n for (let x = 1; x <= table.getNumCols(); x++) {\n const w = table.getCellByPoint({ y: 0, x }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n width += w;\n if (boundaryLeft === 0 && width > left) {\n boundaryLeft = Math.max(x - OVERSCAN_X, 1);\n }\n if (width > right) {\n boundaryRight = Math.min(x + OVERSCAN_X, table.getNumCols());\n break;\n }\n }\n for (let y = 1; y <= table.getNumRows(); y++) {\n const h = table.getCellByPoint({ y, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n height += h;\n if (boundaryTop === 0 && height > top) {\n boundaryTop = Math.max(y - OVERSCAN_Y, 1);\n }\n if (height > bottom) {\n boundaryBottom = Math.min(y + OVERSCAN_Y, table.getNumRows());\n break;\n }\n }\n const ys = range(boundaryTop, boundaryBottom);\n const xs = range(boundaryLeft, boundaryRight);\n const before = table.getRectSize({\n top: 1,\n left: 1,\n bottom: boundaryTop,\n right: boundaryLeft,\n });\n const after = table.getRectSize({\n top: boundaryBottom,\n left: boundaryRight,\n bottom: table.getNumRows(),\n right: table.getNumCols(),\n });\n return {\n ys,\n xs,\n adjuster: {\n top: before.height,\n left: before.width,\n bottom: after.height,\n right: after.width,\n },\n };\n};\n\nexport const smartScroll = (\n table: Table,\n e: HTMLDivElement | null,\n targetPoint: PointType,\n behavior: ScrollBehavior = 'auto',\n) => {\n if (e == null) {\n return;\n }\n const screen = getScreenRect(e);\n const target = getCellRectPositions(table, targetPoint);\n\n // when header is sticky\n const up = target.top - table.headerHeight;\n const left = target.left - table.headerWidth;\n const down = target.bottom - screen.height + 1;\n const right = target.right - screen.width + 1;\n\n const isTopOver = up < screen.top;\n const isLeftOver = left < screen.left;\n const isBottomOver = target.bottom > screen.bottom;\n const isRightOver = target.right > screen.right;\n\n if (isLeftOver) {\n if (isTopOver) {\n // go left up\n e.scrollTo({ left, top: up, behavior });\n } else if (isBottomOver) {\n // go left down\n e.scrollTo({ left, top: down, behavior });\n } else {\n // go left\n e.scrollTo({ left, top: screen.top, behavior });\n }\n } else if (isRightOver) {\n if (isTopOver) {\n // go right up\n e.scrollTo({ left: right, top: up, behavior });\n } else if (isBottomOver) {\n // go right down\n e.scrollTo({ left: right, top: down, behavior });\n } else {\n // go right\n e.scrollTo({ left: right, top: screen.top, behavior });\n }\n } else {\n if (isTopOver) {\n // go up\n e.scrollTo({ left: screen.left, top: up, behavior });\n } else if (isBottomOver) {\n // go down\n e.scrollTo({ left: screen.left, top: down, behavior });\n } else {\n // go nowhere\n }\n }\n};\n\ntype PositionGetter = (rect: DOMRect) => number;\n\nconst findVisibleElement = (\n elements: HTMLTableHeaderCellElement[],\n getPosition: PositionGetter,\n boundary: number,\n dataKey: string,\n): number => {\n const index = binarySearch(\n 0,\n elements.length - 1,\n (mid) => getPosition(elements[mid].getBoundingClientRect()) < boundary,\n false,\n );\n return parseInt(elements[index]?.dataset[dataKey] ?? '1');\n};\n\nexport const getAreaInTabular = (tabularElement: HTMLDivElement): AreaType => {\n const {\n top: topPosition,\n left: leftPosition,\n bottom: bottomPosition,\n right: rightPosition,\n } = tabularElement.getBoundingClientRect();\n\n const rows = Array.from(tabularElement.querySelectorAll('.gs-th-left')) as HTMLTableHeaderCellElement[];\n const cols = Array.from(tabularElement.querySelectorAll('.gs-th-top')) as HTMLTableHeaderCellElement[];\n\n const top = findVisibleElement(rows, (rect) => rect.top, topPosition, 'y');\n const bottom = findVisibleElement(rows, (rect) => rect.bottom, bottomPosition, 'y');\n const left = findVisibleElement(cols, (rect) => rect.left, leftPosition, 'x');\n const right = findVisibleElement(cols, (rect) => rect.right, rightPosition, 'x');\n\n return { top, left, bottom, right };\n};\n","import { OperationType as operations } from '../types';\n\nexport const RemoveRows: operations = 0b00000000000000000000000000000000000000000000000000001; // 1\nexport const RemoveCols: operations = 0b00000000000000000000000000000000000000000000000000010; // 2\nexport const InsertRowsAbove: operations = 0b00000000000000000000000000000000000000000000000000100; // 4\nexport const InsertRowsBelow: operations = 0b00000000000000000000000000000000000000000000000001000; // 8\nexport const InsertColsLeft: operations = 0b00000000000000000000000000000000000000000000000010000; // 16\nexport const InsertColsRight: operations = 0b00000000000000000000000000000000000000000000000100000; // 32\nexport const MoveFrom: operations = 0b00000000000000000000000000000000000000000000001000000; // 64\nexport const MoveTo: operations = 0b00000000000000000000000000000000000000000000010000000; // 128\nexport const Write: operations = 0b00000000000000000000000000000000000000000000100000000; // 256\nexport const Style: operations = 0b00000000000000000000000000000000000000000001000000000; // 512\nexport const Copy: operations = 0b00000000000000000000000000000000000000010000000000000; // 8192\nexport const Resize: operations = 0b00000000000000000000000000000000000000000010000000000; // 1024\nexport const SetRenderer: operations = 0b00000000000000000000000000000000000000000100000000000; // 2048\nexport const SetParser: operations = 0b00000000000000000000000000000000000000001000000000000; // 4096\nexport const SetPolicy: operations = 0b00000000000000000000000000000000000000100000000000000; // 16384\n\nexport const NoOperation: operations = 0;\n\nexport const Move: operations = MoveFrom | MoveTo; // 192\n\nexport const Update: operations = Write | Style | Copy | Resize | SetRenderer | SetParser | SetPolicy; // 7936\n\nexport const InsertRows: operations = InsertRowsAbove | InsertRowsBelow; // 12\n\nexport const InsertCols: operations = InsertColsLeft | InsertColsRight; // 48\n\nexport const Add: operations = InsertRows | InsertCols; // 60\n\nexport const Delete: operations = RemoveRows | RemoveCols; // 3\n\nexport const ReadOnly: operations = Update | Delete | Add | Move; //\n\nexport const hasOperation = (operation: operations | undefined, flag: operations) => {\n if (operation === undefined) {\n return false;\n }\n return (operation & flag) === flag;\n};\n\n// Don't use this function in production\nexport const debugOperations = (prevention: operations | undefined) => {\n const operations: string[] = [];\n if (hasOperation(prevention, RemoveRows)) {\n operations.push('RemoveRow');\n }\n if (hasOperation(prevention, RemoveCols)) {\n operations.push('RemoveCol');\n }\n if (hasOperation(prevention, InsertRowsAbove)) {\n operations.push('InsertRowAbove');\n }\n if (hasOperation(prevention, InsertRowsBelow)) {\n operations.push('InsertRowBelow');\n }\n if (hasOperation(prevention, InsertColsLeft)) {\n operations.push('InsertColLeft');\n }\n if (hasOperation(prevention, InsertColsRight)) {\n operations.push('InsertColRight');\n }\n if (hasOperation(prevention, MoveFrom)) {\n operations.push('MoveFrom');\n }\n if (hasOperation(prevention, MoveTo)) {\n operations.push('MoveTo');\n }\n if (hasOperation(prevention, Write)) {\n operations.push('Write');\n }\n if (hasOperation(prevention, Style)) {\n operations.push('Style');\n }\n if (hasOperation(prevention, Resize)) {\n operations.push('Resize');\n }\n if (hasOperation(prevention, SetRenderer)) {\n operations.push('SetRenderer');\n }\n if (hasOperation(prevention, SetParser)) {\n operations.push('SetParser');\n }\n return operations;\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import { a2p, grantAddressAbsolute, p2a } from '../lib/converters';\nimport { Table } from '../lib/table';\nimport { Id, PointType } from '../types';\n\ntype EvaluateProps = {\n table: Table;\n};\n\nexport type IdentifyProps = {\n table: Table;\n slideY?: number;\n slideX?: number;\n operation?: 'move' | 'removeRows' | 'removeCols';\n dependency: string;\n idMap?: { [id: string]: string };\n};\n\nexport type DisplayProps = {\n table: Table;\n slideY?: number;\n slideX?: number;\n};\n\n// strip sharp and dollars\nconst getId = (idString: string, stripAbsolute = true) => {\n let id = idString;\n if (stripAbsolute && id.startsWith('$')) {\n id = id.slice(1);\n }\n if (stripAbsolute && id.endsWith('$')) {\n id = id.slice(0, -1);\n }\n return id.replace('#', '');\n};\n\nexport class FormulaError {\n public code: string;\n public message: string;\n public error?: Error;\n constructor(code: string, message: string, error?: Error) {\n this.code = code;\n this.message = message;\n this.error = error;\n }\n}\n\nclass Entity<T = any> {\n public value: T;\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class ValueEntity extends Entity {\n public evaluate() {\n return this.value;\n }\n}\n\nexport class UnreferencedEntity extends Entity {\n public evaluate() {\n throw new FormulaError('#REF!', `Reference does not exist.`);\n }\n}\n\nexport class InvalidRefEntity extends Entity<string> {\n public evaluate() {\n throw new FormulaError('#NAME?', `Invalid ref: ${this.value}`);\n }\n}\n\nexport class RefEntity extends Entity<string> {\n constructor(value: string) {\n super(value);\n }\n public stringify() {\n return this.value.toUpperCase();\n }\n\n public evaluate({ table }: EvaluateProps): Table {\n const parsed = parseRef(this.value, { table, dependency: '' });\n if (parsed.table == null) {\n throw new FormulaError('#REF!', `Unknown sheet: ${parsed.sheetName}`);\n }\n if (parsed.addresses.length === 0) {\n throw new FormulaError('#REF!', `Invalid address: ${this.value}`);\n }\n const { y, x } = a2p(parsed.addresses[0]);\n return parsed.table.trim({ top: y, left: x, bottom: y, right: x });\n }\n\n public identify(props: IdentifyProps) {\n const { table, dependency, slideY = 0, slideX = 0 } = props;\n const parsed = parseRef(this.value, props);\n if (parsed.table == null) {\n return this.value;\n }\n const address = parsed.addresses[0];\n const { y, x, absX, absY } = a2p(address);\n const newPoint = {\n y: y + slideY,\n x: x + slideX,\n absX,\n absY,\n };\n const { id, formula } = parsed.table.getIdFormula(newPoint);\n if (id == null) {\n return this.value;\n }\n const system = table.wire.getSystem(id, table);\n table.wire.data[id]!.system = system;\n system.dependents.add(dependency);\n return `#${parsed.table.sheetId}!${formula}`;\n }\n}\n\nexport class RangeEntity extends Entity<string> {\n public stringify() {\n return this.value.toUpperCase();\n }\n\n public evaluate({ table }: EvaluateProps): Table {\n const parsed = parseRef(this.value, { table, dependency: '' });\n if (parsed.table == null) {\n throw new FormulaError('#REF!', `Unknown sheet: ${parsed.sheetName}`);\n }\n if (parsed.addresses.length === 0) {\n throw new FormulaError('#REF!', `Invalid address: ${this.value}`);\n }\n const area = parsed.table.rangeToArea(parsed.addresses.join(':'));\n return parsed.table.trim(area);\n }\n public identify(props: IdentifyProps) {\n const { table, dependency, slideY = 0, slideX = 0 } = props;\n const parsed = parseRef(this.value, props);\n if (parsed.table == null) {\n return this.value;\n }\n const formulas: string[] = [];\n for (let i = 0; i < parsed.addresses.length; i++) {\n const address = parsed.addresses[i];\n const { y, x, absX, absY } = a2p(address);\n const newPoint = {\n y: y + slideY,\n x: x + slideX,\n absX,\n absY,\n };\n const { id, formula } = parsed.table.getIdFormula(newPoint);\n if (id == null) {\n return this.value;\n }\n const system = table.wire.getSystem(id, table);\n table.wire.data[id]!.system = system;\n system.dependents.add(dependency);\n formulas.push(formula!);\n }\n return `#${parsed.table.sheetId}!${formulas.join(':')}`;\n }\n}\n\nexport class IdEntity extends Entity<string> {\n private parse(table: Table): { table: Table; id: string } {\n if (this.value.indexOf('!') !== -1) {\n const [tableId, id] = this.value.split('!'); // #id\n const sheetId = Number(tableId.slice(1));\n return { table: table.getTableBySheetId(sheetId)!, id: getId(id, false) };\n }\n return { table, id: getId(this.value, false) };\n }\n public evaluate({ table }: EvaluateProps) {\n const parsed = this.parse(table);\n if (parsed.id === '?') {\n throw new FormulaError('#REF!', `Reference does not exist`);\n }\n const { y, x } = parsed.table.getPointById(parsed.id);\n const [absY, absX] = [Math.abs(y), Math.abs(x)];\n return parsed.table.trim({\n top: absY,\n left: absX,\n bottom: absY,\n right: absX,\n });\n }\n public display({ table, slideY = 0, slideX = 0 }: DisplayProps) {\n const parsed = this.parse(table);\n const address = parsed.table.getAddressById(parsed.id, slideY, slideX);\n if (!address) {\n return '#REF!';\n }\n if (parsed.table.sheetId === table.sheetId) {\n return address;\n }\n return `${parsed.table.sheetPrefix()}${address}`;\n }\n public identify(props: IdentifyProps) {\n const { table, dependency, slideY = 0, slideX = 0 } = props;\n const address = this.display({ table, slideY, slideX });\n if (address == null || address.length < 2) {\n return '#?';\n }\n const { formula, ids } = parseRef(address, props);\n if (dependency) {\n ids.forEach((id) => {\n const system = table.wire.getSystem(id, table);\n table.wire.data[id]!.system = system;\n system.dependents.add(dependency);\n });\n }\n return formula || '#?';\n }\n}\n\nexport class IdRangeEntity extends Entity<string> {\n private parse(table: Table): { table: Table; ids: string[] } {\n const range = this.value;\n if (range.indexOf('!') !== -1) {\n const [tableId, idRange] = range.split('!'); // #id\n const sheetId = Number(tableId.slice(1));\n return { table: table.getTableBySheetId(sheetId)!, ids: idRange.split(':') };\n }\n return { table, ids: range.split(':') };\n }\n\n public evaluate({ table }: EvaluateProps): Table {\n const parsed = this.parse(table);\n const ids = parsed.ids.map((id) => getId(id));\n const ps: PointType[] = [];\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n if (id === '?') {\n throw new FormulaError('#REF!', `Reference does not exist`);\n }\n const p = parsed.table.getPointById(id);\n ps.push(p);\n }\n const [p1, p2] = ps;\n const [top, left, bottom, right] = [\n p1.y,\n p1.x,\n p2.y || parsed.table.getNumRows(),\n p2.x || parsed.table.getNumCols(),\n ];\n return parsed.table.trim({ top, left, bottom, right });\n }\n public display({ table, slideY = 0, slideX = 0 }: DisplayProps) {\n const parsed = this.parse(table);\n const range = parsed.ids\n .map((id) => getId(id, false))\n .map((id) => parsed.table.getAddressById(id, slideY, slideX) || '#REF!')\n .join(':');\n if (parsed.table.sheetId === table.sheetId) {\n return range;\n }\n return `${parsed.table.sheetPrefix()}${range}`;\n }\n public identify(props: IdentifyProps) {\n const { table, dependency, slideY = 0, slideX = 0 } = props;\n const range = this.display({ table, slideY, slideX });\n const { formula, ids } = parseRef(range, props);\n if (dependency) {\n ids.forEach((id) => {\n const system = table.wire.getSystem(id, table);\n table.wire.data[id]!.system = system;\n system.dependents.add(dependency);\n });\n }\n return formula;\n }\n}\n\nexport class FunctionEntity {\n public args: Expression[];\n public name: string;\n public precedence: number;\n private origin?: PointType;\n constructor(name: string, precedence = 0, args: Expression[] = [], origin?: PointType) {\n this.name = name;\n this.precedence = precedence;\n this.args = args;\n this.origin = origin;\n }\n\n public evaluate({ table }: EvaluateProps): any {\n const name = this.name.toLowerCase();\n const Func = table.getFunction(name);\n if (Func == null) {\n throw new FormulaError('#NAME?', `Unknown function: ${name}`);\n }\n const func = new Func({ args: this.args, table, origin: this.origin });\n return func.call();\n }\n}\n\nexport type Expression =\n | ValueEntity\n | RefEntity\n | RangeEntity\n | IdEntity\n | IdRangeEntity\n | FunctionEntity\n | UnreferencedEntity\n | InvalidRefEntity;\n\nconst ZERO = new ValueEntity(0);\n\nexport type TokenType =\n | 'VALUE'\n | 'REF'\n | 'RANGE'\n | 'ID'\n | 'ID_RANGE'\n | 'FUNCTION'\n | 'PREFIX_OPERATOR'\n | 'INFIX_OPERATOR'\n | 'POSTFIX_OPERATOR'\n | 'OPEN'\n | 'CLOSE'\n | 'COMMA'\n | 'SPACE'\n | 'UNREFERENCED'\n | 'INVALID_REF';\n\nconst INFIX_FUNCTION_NAME_MAP = {\n '+': 'add',\n '-': 'minus',\n '/': 'divide',\n '*': 'multiply',\n '^': 'power',\n '&': 'concat',\n '=': 'eq',\n '<>': 'ne',\n '>': 'gt',\n '>=': 'gte',\n '<': 'lt',\n '<=': 'lte',\n};\n\nconst PREFIX_FUNCTION_NAME_MAP = {\n '-': 'uminus',\n};\n\nconst WHITESPACE_CHARS = new Set([' ', '\\n', '\\r', '\\t', '\\f']);\nconst SPECIAL_CHARS = new Set([...WHITESPACE_CHARS, '+', '-', '/', '*', '^', '&', '=', '<', '>', ')', ',', '%']);\n\nexport class Token {\n type: TokenType;\n entity: any;\n precedence: number;\n private origin?: PointType;\n\n constructor(type: TokenType, entity: any, precedence = 0, origin?: PointType) {\n this.type = type;\n this.entity = entity;\n this.precedence = precedence;\n this.origin = origin;\n }\n\n public length() {\n if (this.type === 'VALUE' && typeof this.entity === 'string') {\n return this.entity.length + 2;\n }\n return new String(this.entity).length;\n }\n\n public stringify() {\n if (this.type === 'VALUE') {\n if (typeof this.entity === 'string') {\n return `\"${this.entity}\"`;\n }\n if (typeof this.entity === 'boolean') {\n return this.entity ? 'TRUE' : 'FALSE';\n }\n }\n return this.entity as string;\n }\n\n public convert() {\n switch (this.type) {\n case 'VALUE':\n return new ValueEntity(this.entity);\n\n case 'ID':\n return new IdEntity(this.entity as string);\n\n case 'ID_RANGE':\n return new IdRangeEntity(this.entity as string);\n\n case 'REF':\n return new RefEntity(this.entity as string);\n\n case 'RANGE':\n return new RangeEntity(this.entity as string);\n\n case 'INFIX_OPERATOR': {\n const name = INFIX_FUNCTION_NAME_MAP[this.entity as keyof typeof INFIX_FUNCTION_NAME_MAP];\n return new FunctionEntity(name, this.precedence);\n }\n case 'PREFIX_OPERATOR': {\n const name = PREFIX_FUNCTION_NAME_MAP[this.entity as keyof typeof PREFIX_FUNCTION_NAME_MAP];\n return new FunctionEntity(name, this.precedence);\n }\n case 'FUNCTION':\n return new FunctionEntity(this.entity as string, 0, [], this.origin);\n\n case 'UNREFERENCED':\n return new UnreferencedEntity(this.entity);\n\n case 'INVALID_REF':\n return new InvalidRefEntity(this.entity as string);\n }\n }\n}\n\nconst isWhiteSpace = (char: string) => {\n return WHITESPACE_CHARS.has(char);\n};\n\nconst TOKEN_OPEN = new Token('OPEN', '('),\n TOKEN_CLOSE = new Token('CLOSE', ')'),\n TOKEN_COMMA = new Token('COMMA', ','),\n TOKEN_ADD = new Token('INFIX_OPERATOR', '+', 3),\n TOKEN_MINUS = new Token('INFIX_OPERATOR', '-', 3),\n TOKEN_UMINUS = new Token('PREFIX_OPERATOR', '-', 6),\n TOKEN_DIVIDE = new Token('INFIX_OPERATOR', '/', 4),\n TOKEN_MULTIPLY = new Token('INFIX_OPERATOR', '*', 4),\n TOKEN_POWER = new Token('INFIX_OPERATOR', '^', 5),\n TOKEN_CONCAT = new Token('INFIX_OPERATOR', '&', 4),\n TOKEN_GTE = new Token('INFIX_OPERATOR', '>=', 2),\n TOKEN_GT = new Token('INFIX_OPERATOR', '>', 2),\n TOKEN_LTE = new Token('INFIX_OPERATOR', '<=', 2),\n TOKEN_LT = new Token('INFIX_OPERATOR', '<', 2),\n TOKEN_NE = new Token('INFIX_OPERATOR', '<>', 1),\n TOKEN_EQ = new Token('INFIX_OPERATOR', '=', 1);\n\nconst BOOLS: { [s: string]: boolean } = { ['true']: true, ['false']: false };\n\ntype LexerOption = {\n origin?: PointType;\n idMap?: { [id: Id]: Id };\n};\n\nexport class Lexer {\n private index: number;\n private formula: string;\n public tokens: Token[] = [];\n public foreign: boolean = false;\n private origin?: PointType;\n private idMap: { [id: Id]: Id };\n\n constructor(formula: string, options?: LexerOption) {\n this.formula = formula;\n this.index = 0;\n this.tokens = [];\n if (options?.origin) {\n this.origin = options.origin;\n }\n\n this.idMap = options?.idMap ?? {};\n }\n\n private isWhiteSpace() {\n return isWhiteSpace(this.formula[this.index]);\n }\n\n private next(base = 1) {\n this.index += base;\n }\n\n private get(base = 0) {\n const c = this.formula[this.index + base];\n return c;\n }\n\n private getToken(base = 0) {\n return this.tokens[this.tokens.length + base];\n }\n\n public getTokenIndexByCharPosition(pos: number): [number, boolean] {\n // return [index, edge]\n let start = 0,\n end = 0;\n\n for (let i = 0; i < this.tokens.length; i++) {\n const token = this.tokens[i];\n end = start + token.length();\n if (start <= pos && pos <= end) {\n return [i, pos === start || pos === end];\n }\n start = end;\n }\n return [-1, false];\n }\n\n public getTokenPositionRange(index: number, slide = 1): [number, number] {\n let start = 0,\n end = 0;\n for (let i = 0; i < index; i++) {\n start = end;\n end += this.tokens[i].length();\n }\n return [start + slide, end + slide];\n }\n\n public stringify() {\n return this.tokens.map((t) => t.stringify()).join('');\n }\n\n public identify(props: IdentifyProps): string {\n const converted = this.tokens.map((t) => {\n switch (t.type) {\n case 'VALUE':\n if (typeof t.entity === 'number' || typeof t.entity === 'boolean') {\n return t.entity;\n }\n return `\"${t.entity}\"`;\n\n case 'ID':\n return new IdEntity(t.entity as string).identify(props);\n\n case 'ID_RANGE':\n return new IdRangeEntity(t.entity as string).identify(props);\n\n case 'REF':\n return new RefEntity(t.entity as string).identify(props);\n\n case 'RANGE':\n return new RangeEntity(t.entity as string).identify(props);\n }\n return t.entity;\n });\n return converted.join('');\n }\n\n public display({ table }: DisplayProps) {\n return this.tokens\n .map((t) => {\n switch (t.type) {\n case 'VALUE':\n if (typeof t.entity === 'number' || typeof t.entity === 'boolean') {\n return t.entity;\n }\n return `\"${t.entity}\"`;\n case 'ID':\n return new IdEntity(t.entity as string).display({ table });\n case 'ID_RANGE':\n return new IdRangeEntity(t.entity as string).display({ table });\n }\n return t.entity;\n })\n .join('');\n }\n\n public tokenize() {\n while (this.index <= this.formula.length) {\n this.skipSpaces();\n let char = this.get();\n this.next();\n switch (char) {\n case undefined:\n return;\n case '(':\n this.tokens.push(TOKEN_OPEN);\n continue;\n case ')':\n this.tokens.push(TOKEN_CLOSE);\n continue;\n case ',':\n this.tokens.push(TOKEN_COMMA);\n continue;\n case '+':\n this.tokens.push(TOKEN_ADD);\n continue;\n case '-': {\n const prev1 = this.getToken(-1)?.type;\n const prev2 = this.getToken(-2)?.type;\n if (prev1 === 'INFIX_OPERATOR' || (prev1 === 'SPACE' && prev2 === 'INFIX_OPERATOR')) {\n this.tokens.push(TOKEN_UMINUS);\n } else {\n this.tokens.push(TOKEN_MINUS);\n }\n continue;\n }\n case '/':\n this.tokens.push(TOKEN_DIVIDE);\n continue;\n case '*':\n this.tokens.push(TOKEN_MULTIPLY);\n continue;\n case '^':\n this.tokens.push(TOKEN_POWER);\n continue;\n case '&':\n this.tokens.push(TOKEN_CONCAT);\n continue;\n case '=':\n this.tokens.push(TOKEN_EQ);\n continue;\n case '>':\n if (this.get() === '=') {\n this.next();\n this.tokens.push(TOKEN_GTE);\n continue;\n }\n this.tokens.push(TOKEN_GT);\n continue;\n case '<':\n if (this.get() === '=') {\n this.next();\n this.tokens.push(TOKEN_LTE);\n continue;\n }\n if (this.get() === '>') {\n this.next();\n this.tokens.push(TOKEN_NE);\n continue;\n }\n this.tokens.push(TOKEN_LT);\n continue;\n case '\"': {\n const buf = this.getString('\"');\n this.tokens.push(new Token('VALUE', buf));\n continue;\n }\n case \"'\": {\n const buf = this.getString(\"'\");\n char = `'${buf}'`;\n break;\n }\n case '!': {\n this.foreign = true;\n break;\n // not continue\n }\n case '%': {\n this.tokens.push(new Token('POSTFIX_OPERATOR', '%', 4));\n continue;\n }\n } // switch end\n let buf = char;\n\n while (true) {\n const c = this.get();\n if (c === '(') {\n this.tokens.push(new Token('FUNCTION', buf, 0, this.origin), TOKEN_OPEN);\n this.next();\n break;\n }\n if (c == null || SPECIAL_CHARS.has(c)) {\n if (buf.length === 0) {\n break;\n }\n if (buf.match(/^[+-]?(\\d*[.])?\\d+$/)) {\n this.tokens.push(new Token('VALUE', parseFloat(buf)));\n } else {\n const bool = BOOLS[buf.toLowerCase()];\n if (bool != null) {\n this.tokens.push(new Token('VALUE', bool));\n } else if (buf.startsWith('#')) {\n if (buf.indexOf('#REF!') !== -1) {\n this.tokens.push(new Token('UNREFERENCED', buf));\n } else if (buf.indexOf(':') !== -1) {\n this.tokens.push(new Token('ID_RANGE', this.resolveIdRange(buf)));\n } else {\n this.tokens.push(new Token('ID', buf));\n }\n } else if (buf.indexOf(':') !== -1) {\n this.tokens.push(new Token('RANGE', buf));\n } else {\n if (isNaN(buf[buf.length - 1] as unknown as number)) {\n this.tokens.push(new Token('INVALID_REF', buf));\n } else {\n this.tokens.push(new Token('REF', buf));\n }\n }\n }\n break;\n }\n buf += c;\n this.next();\n }\n }\n }\n private skipSpaces() {\n let space: string = '';\n while (this.isWhiteSpace()) {\n space += this.formula[this.index++];\n }\n if (space !== '') {\n this.tokens.push(new Token('SPACE', space));\n }\n }\n\n private getString(quote = '\"') {\n let buf = '';\n\n while (true) {\n const c = this.get();\n this.next();\n if (c == null) {\n break;\n }\n if (c === quote) {\n if (quote === '\"' && this.get() === quote) {\n // escape for double quotes\n buf += quote;\n this.next();\n continue;\n } else if (quote === \"'\" && this.get() === quote) {\n // keep consecutive single quotes as is\n buf += c;\n continue;\n } else {\n break;\n }\n } else {\n buf += c;\n }\n }\n return buf;\n }\n\n private resolveIdRange(range: string) {\n const [sheetId, refString] = range.split('!');\n const refs = refString.split(':');\n const done = new Set<number>();\n\n Object.keys(this.idMap).forEach((before) => {\n const after = this.idMap[before];\n\n // #x -> #y, #$x -> #$y, #x$ -> #y$, #$x$ -> #$y$\n const regex = new RegExp(`(\\\\$)?#${before}(\\\\$)?`);\n\n for (let i = 0; i < refs.length; i++) {\n if (done.has(i)) {\n continue;\n }\n\n const ref = refs[i];\n const replaced = ref.replace(regex, (_, prefix, suffix) => {\n return `${prefix || ''}#${after}${suffix || ''}`;\n });\n if (replaced === ref) {\n continue;\n }\n\n refs[i] = replaced;\n done.add(i);\n }\n });\n return `${sheetId}!${refs.join(':')}`;\n }\n}\n\nexport class Parser {\n public index = 0;\n public depth = 0;\n public tokens: Token[];\n constructor(tokens: Token[]) {\n this.tokens = tokens;\n }\n public build() {\n const { expr } = this.parse(false);\n return expr;\n }\n\n private parse(underFunction: boolean) {\n const stack: Expression[] = [];\n let lastOperator: undefined | FunctionEntity;\n\n const complement = (hasNext = false) => {\n if (lastOperator) {\n const outer = stack.pop();\n lastOperator.args.push(outer!);\n }\n return { hasNext, expr: stack.shift() };\n };\n\n while (this.tokens.length > this.index) {\n const token = this.tokens[this.index++];\n if (token.type === 'SPACE') {\n continue;\n }\n if (token.type === 'COMMA') {\n if (!underFunction) {\n throw new FormulaError('#ERROR!', 'Invalid comma');\n }\n return complement(true);\n } else if (\n token.type === 'VALUE' ||\n token.type === 'ID' ||\n token.type === 'ID_RANGE' ||\n token.type === 'REF' ||\n token.type === 'RANGE' ||\n token.type === 'UNREFERENCED' ||\n token.type === 'INVALID_REF'\n ) {\n const expr = token.convert();\n stack.push(expr!);\n } else if (token.type === 'POSTFIX_OPERATOR' && token.entity === '%') {\n const expr = stack.pop();\n if (!expr) {\n throw new FormulaError('#ERROR!', 'Missing expression before %');\n }\n const divideBy100 = new FunctionEntity('divide', 4, [expr, new ValueEntity(100)]);\n stack.push(divideBy100);\n } else if (token.type === 'FUNCTION') {\n this.index++;\n this.depth++;\n const func = token.convert() as FunctionEntity;\n stack.push(func);\n\n while (true) {\n const { expr, hasNext } = this.parse(true);\n if (expr) {\n func.args.push(expr);\n }\n if (!hasNext) {\n break;\n }\n }\n } else if (token.type === 'OPEN') {\n this.depth++;\n const { expr } = this.parse(false);\n stack.push(expr!);\n } else if (token.type === 'CLOSE') {\n if (this.depth-- === 0) {\n throw new FormulaError('#ERROR!', 'Unexpected end paren');\n }\n return complement();\n } else if (token.type === 'INFIX_OPERATOR') {\n const operator = token.convert() as FunctionEntity;\n let left = stack.pop();\n if (left == null) {\n if (operator.name === 'minus' || operator.name === 'add') {\n left = ZERO;\n } else {\n throw new FormulaError('#ERROR!', 'Missing left expression');\n }\n }\n\n if (lastOperator == null) {\n operator.args.push(left);\n stack.unshift(operator);\n } else if (operator.precedence > lastOperator.precedence) {\n operator.args.push(left);\n lastOperator.args.push(operator);\n stack.unshift(lastOperator);\n } else {\n const outer = stack.shift();\n operator.args.push(outer!);\n lastOperator.args.push(left);\n stack.unshift(operator);\n }\n lastOperator = operator;\n } else if (token.type === 'PREFIX_OPERATOR') {\n const operator = token.convert() as FunctionEntity;\n if (lastOperator) {\n lastOperator.args.push(operator);\n } else {\n stack.unshift(operator);\n }\n lastOperator = operator;\n }\n }\n return complement();\n }\n}\n\nexport const identifyFormula = (value: any, { idMap, ...props }: IdentifyProps) => {\n if (typeof value === 'string' || value instanceof String) {\n if (value.charAt(0) === '=') {\n const lexer = new Lexer(value.substring(1), { idMap });\n lexer.tokenize();\n const identified = lexer.identify(props);\n return '=' + identified;\n }\n }\n return value;\n};\n\nexport const stripSheetName = (sheetName: string) => {\n if (sheetName.charAt(0) === \"'\") {\n sheetName = sheetName.slice(1);\n }\n if (sheetName.charAt(sheetName.length - 1) === \"'\") {\n sheetName = sheetName.slice(0, -1);\n }\n return sheetName;\n};\n\nexport function splitRef(ref: string): { sheetName: string | undefined; addresses: string[] } {\n let sheetName: string | undefined = undefined;\n let addresses: string[] = [];\n\n if (ref.startsWith(\"'\")) {\n let i = 1;\n let name = '';\n\n while (i < ref.length) {\n const char = ref[i];\n const nextChar = ref[i + 1];\n\n if (char === \"'\") {\n if (nextChar === \"'\") {\n name += \"'\";\n i += 2;\n } else if (nextChar === '!') {\n i += 2;\n break;\n } else {\n return { sheetName: undefined, addresses: [] };\n }\n } else {\n name += char;\n i++;\n }\n }\n\n sheetName = name;\n const addressPart = ref.slice(i).trim();\n addresses = addressPart.split(':');\n } else {\n const excl = ref.indexOf('!');\n if (excl !== -1) {\n sheetName = ref.slice(0, excl);\n const addressPart = ref.slice(excl + 1).trim();\n addresses = addressPart.split(':');\n } else {\n addresses = ref.trim().split(':');\n }\n }\n return { sheetName, addresses };\n}\n\nexport const parseRef = (\n ref: string,\n { table, operation, dependency }: IdentifyProps,\n): {\n table: Table;\n sheetId?: number;\n formula?: string;\n sheetName?: string;\n addresses: string[];\n ids: string[];\n} => {\n const { sheetName, addresses } = splitRef(ref);\n const ids: string[] = [];\n if (sheetName) {\n table = table.getTableBySheetName(sheetName)!;\n if (table == null) {\n return { table, sheetName, addresses, ids };\n }\n }\n if (addresses.length === 0) {\n return { table, sheetName, addresses, ids };\n }\n const refs: string[] = [];\n for (let i = 0; i < addresses.length; i++) {\n const address = addresses[i];\n const { y, x, absX, absY } = a2p(address);\n let id = table.getId({ y, x });\n\n // if the id is the same as the dependency by the operation,\n // we need to adjust the id based on the operation\n if (id === dependency) {\n if (operation === 'removeRows') {\n id = table.getId({ y: y - 1, x });\n } else if (operation === 'removeCols') {\n id = table.getId({ y, x: x - 1 });\n }\n }\n if (id == null) {\n refs.push(grantAddressAbsolute(address, !!absX, !!absY) || '?');\n continue;\n }\n ids.push(id);\n refs.push(`${absX ? '$' : ''}#${id}${absY ? '$' : ''}`);\n }\n let formula = `#${table.sheetId}!${refs.join(':')}`;\n return {\n table,\n sheetName,\n addresses,\n ids,\n formula,\n };\n};\n","import dayjs from 'dayjs';\n\nexport const defaultTimeDeltaFormat = 'HH:mm:ss';\n\nexport const BASE_DATE = new Date('2345-01-02T03:04:05Z');\ntype DiffFunction = (date: Date | number, amount: number) => Date;\nconst UNITS = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'] as const;\nconst ADD_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).add(amount, unit).toDate(),\n) as DiffFunction[];\nconst SUB_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).subtract(amount, unit).toDate(),\n) as DiffFunction[];\n\ntype Diff = [number, number, number, number, number, number, number];\n\nexport class TimeDelta {\n public gsType = 'TimeDelta';\n protected diff: Diff = [0, 0, 0, 0, 0, 0, 0];\n private date1: Date;\n private date2: Date;\n public format: string;\n\n constructor(date1: Date, date2: Date, format = defaultTimeDeltaFormat) {\n this.diff = [\n date1.getFullYear() - date2.getFullYear(),\n date1.getMonth() - date2.getMonth(),\n date1.getDate() - date2.getDate(),\n date1.getHours() - date2.getHours(),\n date1.getMinutes() - date2.getMinutes(),\n date1.getSeconds() - date2.getSeconds(),\n date1.getMilliseconds() - date2.getMilliseconds(),\n ];\n this.date1 = date1;\n this.date2 = date2;\n this.format = format;\n }\n public add(date: Date) {\n this.diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return date;\n }\n public sub(date: Date) {\n this.diff.forEach((n, i) => {\n date = SUB_FNS[i](date, n);\n });\n return date;\n }\n\n public stringify(format?: string) {\n if (format == null) {\n format = this.format;\n }\n const tokens = [];\n const msecs = this.date1.getMilliseconds() - this.date2.getMilliseconds();\n let secs = (this.date1.getTime() - this.date2.getTime()) / 1000;\n for (const divider of [3600, 60]) {\n tokens.push(Math.floor(secs / divider));\n secs %= divider;\n }\n tokens.push(secs, msecs);\n let result = format;\n result = result.replace('HH', String(tokens[0]).padStart(2, '0'));\n result = result.replace('H', String(tokens[0]));\n result = result.replace('mm', String(tokens[1]).padStart(2, '0'));\n result = result.replace('ss', String(tokens[2]).padStart(2, '0'));\n result = result.replace('SSS', String(tokens[3]).padStart(3, '0'));\n result = result.replace('SS', String(tokens[3]).padStart(2, '0').substring(0, 2));\n result = result.replace('S', String(tokens[3]).padStart(1, '0').substring(0, 1));\n return result;\n }\n\n public toJSON() {\n return this.stringify();\n }\n\n public toString() {\n return this.stringify();\n }\n\n static create(hours = 0, minutes = 0, seconds = 0, milliseconds = 0) {\n const diff: Diff = [0, 0, 0, hours, minutes, seconds, milliseconds];\n let date = BASE_DATE;\n diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return new TimeDelta(date, BASE_DATE);\n }\n\n static is(obj: any): boolean {\n if (obj instanceof TimeDelta) {\n return true;\n }\n if (obj?.gsType === 'TimeDelta') {\n return true;\n }\n return false;\n }\n\n static ensure(obj: any) {\n if (obj instanceof TimeDelta) {\n return obj;\n }\n if (obj?.gsType === 'TimeDelta') {\n return TimeDelta.fromObject(obj);\n }\n return TimeDelta.create();\n }\n static fromObject(obj: any) {\n return new TimeDelta(new Date(obj.date1), new Date(obj.date2));\n }\n static parse(value: string, format = defaultTimeDeltaFormat, strict = false): TimeDelta | undefined {\n {\n const formattedMatcher = dayjsFormatToNamedRegex(format);\n const match = value.match(formattedMatcher);\n if (match?.groups) {\n return TimeDelta.create(\n Number(match.groups.HH || match.groups.H || 0),\n Number(match.groups.mm || match.groups.m || 0),\n Number(match.groups.ss || match.groups.s || 0),\n Number(match.groups.SSS || match.groups.SS || match.groups.S || 0),\n );\n }\n }\n if (strict) {\n return;\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes, seconds] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})\\.(\\d+)$/);\n if (match) {\n const [, _sign, hours, minutes, seconds, msecs] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(\n sign * Number(hours),\n sign * Number(minutes),\n sign * Number(seconds),\n sign * Number(msecs),\n );\n }\n }\n }\n}\n\nconst tokenRegexMap: Record<string, { group: string; pattern: string }> = {\n HH: { group: 'HH', pattern: '(?<HH>\\\\d+)' },\n H: { group: 'H', pattern: '(?<HH>\\\\d+)' },\n mm: { group: 'mm', pattern: '(?<mm>[0-5]\\\\d)' },\n m: { group: 'm', pattern: '(?<m>\\\\d|[1-5]\\\\d)' },\n ss: { group: 'ss', pattern: '(?<ss>[0-5]\\\\d)' },\n s: { group: 's', pattern: '(?<s>\\\\d|[1-5]\\\\d)' },\n SSS: { group: 'SSS', pattern: '(?<SSS>\\\\d{3})' },\n SS: { group: 'SS', pattern: '(?<SS>\\\\d{2})' },\n S: { group: 'S', pattern: '(?<S>\\\\d)' },\n};\n\nfunction dayjsFormatToNamedRegex(format: string): RegExp {\n const sortedTokens = Object.keys(tokenRegexMap).sort((a, b) => b.length - a.length);\n const tokenPattern = new RegExp(sortedTokens.join('|'), 'g');\n\n const escapedFormat = format.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n const regexSource = escapedFormat.replace(tokenPattern, (match) => {\n return tokenRegexMap[match]?.pattern ?? match;\n });\n\n return new RegExp(`^${regexSource}$`);\n}\n\nexport const safeQueueMicrotask =\n typeof queueMicrotask === 'function' ? queueMicrotask : (cb: () => void) => Promise.resolve().then(cb);\n","import dayjs from 'dayjs';\nimport type { AreaType, CellsByAddressType, CellType, PointType, StoreType } from '../types';\nimport { Table } from './table';\nimport { areaShape, areaToZone, complementSelectingArea, concatAreas, zoneToArea } from './structs';\nimport { p2a } from './converters';\nimport { identifyFormula } from '../formula/evaluator';\nimport { TimeDelta } from './time';\nimport { CSSProperties } from 'react';\n\nconst BORDER_AUTOFILL_DRAGGING = 'dashed 1px #888888';\n\ntype Direction = 'left' | 'right' | 'up' | 'down' | 'none';\ntype Orientation = 'horizontal' | 'vertical' | 'none';\nconst DirectionMapping: {\n [key: string]: [Orientation, number];\n} = {\n left: ['horizontal', -1],\n right: ['horizontal', 1],\n up: ['vertical', -1],\n down: ['vertical', 1],\n none: ['none', 0],\n};\n\nexport class Autofill {\n private readonly src: AreaType;\n private readonly dst: AreaType;\n private readonly direction: Direction;\n private readonly table: Table;\n constructor(store: StoreType, draggingTo: PointType) {\n const { tableReactive: tableRef, choosing, selectingZone } = store;\n const table = tableRef.current;\n if (!table) {\n throw new Error('Table is not available');\n }\n this.src = complementSelectingArea(zoneToArea(selectingZone), choosing);\n this.direction = this.suggestDirection(draggingTo);\n this.dst = this.getDestinationArea(draggingTo);\n this.table = table;\n }\n\n public get applied(): Table {\n const [orientation, sign] = DirectionMapping[this.direction];\n const matrix = this.table.getMatrix({ area: this.src, refEvaluation: 'SYSTEM' });\n const srcShape = areaShape({ ...this.src, base: 1 });\n const dstShape = areaShape({ ...this.dst, base: 1 });\n\n const diff: CellsByAddressType = {};\n if (orientation === 'horizontal') {\n for (let i = 0; i < dstShape.height; i++) {\n // TODO: pass the originPath\n const patterns = this.getChangePatterns(matrix[i], '');\n for (let j = 0; j < dstShape.width; j++) {\n const baseCell = matrix[i % srcShape.height]?.[j % srcShape.width];\n const x = sign > 0 ? this.dst.left + j : this.dst.right - j;\n const px = sign > 0 ? j % srcShape.width : (srcShape.width - 1 - (j % srcShape.width)) % srcShape.width;\n const point = { y: this.dst.top + i, x };\n const id = this.table.getId(point);\n const value = patterns[px].next().value;\n const nextValue = identifyFormula(value, {\n dependency: id,\n table: this.table,\n });\n diff[p2a(point)] = {\n ...baseCell,\n value: nextValue,\n };\n }\n }\n } else if (orientation === 'vertical') {\n for (let i = 0; i < dstShape.width; i++) {\n // TODO: pass the originPath\n const patterns = this.getChangePatterns(\n matrix.map((row) => row[i]),\n '',\n );\n for (let j = 0; j < dstShape.height; j++) {\n const baseCell = matrix[j % srcShape.height]?.[i % srcShape.width];\n const y = sign > 0 ? this.dst.top + j : this.dst.bottom - j;\n const py = sign > 0 ? j % srcShape.height : (srcShape.height - 1 - (j % srcShape.height)) % srcShape.height;\n const value = patterns[py].next().value;\n diff[p2a({ y, x: this.dst.left + i })] = { ...baseCell, value };\n }\n }\n }\n const table = this.table.update({\n diff,\n operator: 'USER',\n undoReflection: {\n sheetId: this.table.sheetId,\n selectingZone: areaToZone(this.src),\n },\n redoReflection: {\n sheetId: this.table.sheetId,\n selectingZone: areaToZone(this.dst),\n },\n });\n return table;\n }\n\n public get wholeArea() {\n return concatAreas(this.src, this.dst);\n }\n\n public getCellStyle(target: PointType) {\n const { x, y } = target;\n const style: CSSProperties = {};\n const { top, left, bottom, right } = this.src;\n\n switch (this.direction) {\n case 'left': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.left === x && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'right': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.right === x - 1 && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n\n case 'up': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.top === y && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'down': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.bottom === y - 1 && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n }\n return style;\n }\n\n private getDestinationArea(autofillDraggingTo: PointType): AreaType {\n const { x, y } = autofillDraggingTo;\n const { top, left, bottom, right } = this.src;\n switch (this.direction) {\n case 'left':\n return { top, bottom, left: x, right: left - 1 };\n case 'right':\n return { top, bottom, left: right + 1, right: x };\n case 'up':\n return { left, right, top: y, bottom: top - 1 };\n case 'down':\n return { left, right, top: bottom + 1, bottom: y };\n }\n return this.src;\n }\n\n private suggestDirection(draggingTo: PointType): Direction {\n const { top, left, bottom, right } = this.src;\n let horizontal = 0,\n vertical = 0;\n if (draggingTo.x < left) {\n horizontal = draggingTo.x - left;\n } else if (draggingTo.x > right) {\n horizontal = draggingTo.x - right;\n }\n if (draggingTo.y < top) {\n vertical = draggingTo.y - top;\n } else if (draggingTo.y > bottom) {\n vertical = draggingTo.y - bottom;\n }\n // diagonal\n if (Math.abs(horizontal) > 0 && Math.abs(vertical) > 0) {\n if (Math.abs(horizontal) > Math.abs(vertical)) {\n return horizontal < 0 ? 'left' : 'right';\n }\n return vertical < 0 ? 'up' : 'down';\n }\n if (horizontal !== 0) {\n return horizontal < 0 ? 'left' : 'right';\n }\n if (vertical !== 0) {\n return vertical < 0 ? 'up' : 'down';\n }\n return 'none';\n }\n\n private getChangePatterns(cells: (CellType | null)[], id: string): Generator[] {\n const result: Generator[] = [];\n const groups = groupByType(cells);\n const [orientation, sign] = DirectionMapping[this.direction];\n groups.forEach((group) => {\n const lastValue = sign > 0 ? group.last : group.first;\n switch (group.kind) {\n case 'other': {\n result.push(pass(group.first));\n return;\n }\n case 'formula': {\n const value = group.first;\n const table = this.table;\n\n function* generateFormula() {\n let slide = 0;\n const skip = cells.length * sign;\n while (true) {\n slide += skip;\n yield identifyFormula(value, {\n table,\n dependency: id,\n slideY: orientation === 'vertical' ? slide : 0,\n slideX: orientation === 'horizontal' ? slide : 0,\n });\n }\n }\n result.push(generateFormula());\n return;\n }\n case 'number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateNumber() {\n let value = lastValue;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield value;\n }\n }\n const g = generateNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'date': {\n const next = (d: Date) => {\n return sign > 0 ? group.timeDelta.add(d) : group.timeDelta.sub(d);\n };\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateDate() {\n let value = lastValue as Date;\n while (true) {\n value = next(value);\n yield new Date(value);\n }\n }\n const g = generateDate();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'string+number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateStringNumber() {\n const { prefix } = extractStringNumber(group.first as string);\n const { number: lastNumber } = extractStringNumber(lastValue as string);\n let value = lastNumber;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield `${prefix}${Math.abs(value)}`;\n }\n }\n const g = generateStringNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n }\n });\n return result;\n }\n}\n\nfunction* pass(value: any) {\n while (true) {\n yield value;\n }\n}\n\ntype GroupKind = 'number' | 'date' | 'string+number' | 'formula' | 'other';\n\nconst StringNumberPattern = new RegExp('(.+?)(\\\\d+)$');\n\nconst extractStringNumber = (value: string) => {\n const match = value.match(StringNumberPattern);\n if (match) {\n const [, prefix, n] = match;\n return { prefix, number: Number(n) };\n }\n return { prefix: '', number: 0 };\n};\n\nclass TypedGroup {\n public timeDelta: TimeDelta = TimeDelta.create();\n public numericDelta: number = 0;\n public kind: GroupKind;\n public nexts: any[];\n public first: any;\n public equidistant = true;\n\n constructor(value: any) {\n this.first = value;\n this.nexts = [];\n this.kind = this.discriminate(value);\n }\n private discriminate(value: any): GroupKind {\n const kind = value instanceof Date ? 'date' : typeof value;\n if (kind === 'number' || kind === 'date') {\n return kind;\n }\n if (kind === 'string' && value[0] === '=') {\n return 'formula';\n } else if (kind === 'string' && value.match(StringNumberPattern)) {\n return 'string+number';\n }\n return 'other';\n }\n\n public get last() {\n if (this.nexts.length === 0) {\n return this.first;\n }\n return this.nexts[this.nexts.length - 1];\n }\n\n public add(value: any): TypedGroup | undefined {\n const kind = this.discriminate(value);\n if (this.kind !== kind || kind === 'other' || kind === 'formula') {\n return new TypedGroup(value);\n }\n if (this.nexts.length === 0) {\n switch (kind) {\n case 'date': {\n this.timeDelta = new TimeDelta(value as Date, this.first as Date);\n break;\n }\n case 'number': {\n this.numericDelta = (value as number) - this.first;\n break;\n }\n case 'string+number': {\n const { prefix: prefix1, number: number1 } = extractStringNumber(this.first as string);\n const { prefix: prefix2, number: number2 } = extractStringNumber(value as string);\n if (prefix1 === prefix2) {\n this.numericDelta = number2 - number1;\n }\n break;\n }\n }\n }\n this.nexts.push(value);\n }\n\n public subdivide() {\n if (this.nexts.length === 0) {\n return [];\n }\n\n const news: TypedGroup[] = [];\n\n let lastGroup: TypedGroup = this;\n switch (this.kind) {\n case 'date': {\n const eq = this.nexts.every((v, i) => i === 0 || dayjs(v).isSame(this.timeDelta.add(this.nexts[i - 1])));\n this.equidistant = eq;\n return [];\n }\n case 'number': {\n const eq = this.nexts.every((v, i) => i === 0 || v === this.first + this.numericDelta * (i + 1));\n this.equidistant = eq;\n return [];\n }\n case 'string+number': {\n const { prefix: basePrefix } = extractStringNumber(this.first as string);\n for (let i = 0; i < lastGroup.nexts.length; i++) {\n const next = lastGroup.nexts[i];\n const { prefix, number } = extractStringNumber(next as string);\n if (basePrefix !== prefix) {\n const nexts = this.nexts.splice(i, this.nexts.length);\n lastGroup = new TypedGroup(nexts.splice(0, 1)[0]);\n nexts.forEach(lastGroup.add.bind(lastGroup));\n news.push(lastGroup, ...lastGroup.subdivide());\n break;\n } else {\n const { number: firstNumber } = extractStringNumber(lastGroup.first as string);\n if (number !== firstNumber + (i + 1) * lastGroup.numericDelta) {\n lastGroup.equidistant = false;\n }\n }\n }\n break;\n }\n }\n\n return news;\n }\n}\n\nfunction groupByType(cells: (CellType | null)[]): TypedGroup[] {\n let group = new TypedGroup(cells[0]?.value);\n const groups: TypedGroup[] = [group];\n\n for (let i = 1; i < cells.length; i++) {\n const value = cells[i]?.value;\n const nextGroup = group.add(value);\n if (nextGroup) {\n groups.push(nextGroup);\n group = nextGroup;\n }\n }\n for (let i = groups.length - 1; i >= 0; i--) {\n const group = groups[i];\n groups.splice(i + 1, 0, ...group.subdivide());\n }\n return groups;\n}\n","import {\n StoreType,\n RectType,\n ZoneType,\n PointType,\n RangeType,\n FeedbackType,\n CellsByAddressType,\n AreaType,\n PositionType,\n ModeType,\n RawCellType,\n OperatorType,\n} from '../types';\nimport { zoneToArea, superposeArea, matrixShape, areaShape, areaToZone, zoneShape, restrictZone } from '../lib/structs';\nimport { Table } from '../lib/table';\n\nimport { p2a, a2p } from '../lib/converters';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH } from '../constants';\nimport { initSearchStatement, restrictPoints } from './helpers';\nimport { smartScroll } from '../lib/virtualization';\nimport * as prevention from '../lib/operation';\nimport { Autofill } from '../lib/autofill';\n\nconst resetZone: ZoneType = { startY: -1, startX: -1, endY: -1, endX: -1 };\n\nconst actions: { [s: string]: CoreAction<any> } = {};\n\ntype StoreWithCallback = StoreType & {\n callback?: (store: StoreType) => void;\n};\n\nexport const reducer = <T>(store: StoreType, action: { type: number; value: T }): StoreType => {\n const act: CoreAction<T> | undefined = actions[action.type];\n if (act == null) {\n return store;\n }\n\n const { callback, ...newStore } = act.reduce(store, action.value);\n callback?.(newStore);\n return { ...store, ...newStore };\n};\n\nexport class CoreAction<T> {\n static head = 1;\n private actionId: number = 1;\n\n public reduce(store: StoreType, payload: T): StoreWithCallback {\n return store;\n }\n public call(payload: T): { type: number; value: T } {\n return {\n type: this.actionId,\n value: payload,\n };\n }\n public bind() {\n this.actionId = CoreAction.head++;\n actions[this.actionId] = this;\n return this.call.bind(this);\n }\n}\n\nclass SetSearchQueryAction<T extends string | undefined> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const searchQuery = payload;\n const { tableReactive: tableRef } = store;\n if (tableRef.current == null) {\n return store;\n }\n return {\n ...store,\n ...initSearchStatement(tableRef.current, { ...store, searchQuery }),\n searchQuery,\n };\n }\n}\nexport const setSearchQuery = new SetSearchQueryAction().bind();\n\nclass SetSearchCaseSensitiveAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const searchCaseSensitive = payload;\n const { tableReactive: tableRef } = store;\n if (tableRef.current == null) {\n return store;\n }\n return {\n ...store,\n ...initSearchStatement(tableRef.current, { ...store, searchCaseSensitive }),\n searchCaseSensitive,\n };\n }\n}\nexport const setSearchCaseSensitive = new SetSearchCaseSensitiveAction().bind();\n\nclass SetEditingAddressAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editingAddress: payload,\n };\n }\n}\nexport const setEditingAddress = new SetEditingAddressAction().bind();\n\nclass SetAutofillDraggingToAction<T extends PointType | null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n autofillDraggingTo: payload,\n };\n }\n}\nexport const setAutofillDraggingTo = new SetAutofillDraggingToAction().bind();\n\nclass SubmitAutofillAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const autofill = new Autofill(store, payload);\n const table = autofill.applied;\n const selectingZone = areaToZone(autofill.wholeArea);\n\n return {\n ...store,\n tableReactive: { current: table },\n ...initSearchStatement(table, store),\n ...restrictPoints(store, table),\n selectingZone,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n autofillDraggingTo: null,\n };\n }\n}\nexport const submitAutofill = new SubmitAutofillAction().bind();\n\nclass SetContextMenuPositionAction<T extends PositionType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n contextMenuPosition: payload,\n };\n }\n}\nexport const setContextMenuPosition = new SetContextMenuPositionAction().bind();\n\nclass SetResizingPositionYAction<T extends [number, number, number]> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n resizingPositionY: payload,\n };\n }\n}\nexport const setResizingPositionY = new SetResizingPositionYAction().bind();\n\nclass SetResizingPositionXAction<T extends [number, number, number]> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n resizingPositionX: payload,\n };\n }\n}\nexport const setResizingPositionX = new SetResizingPositionXAction().bind();\n\nclass SetEnteringAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n entering: payload,\n };\n }\n}\nexport const setEntering = new SetEnteringAction().bind();\n\nclass UpdateTableAction<T extends Table> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n tableReactive: { current: payload },\n ...initSearchStatement(payload, store),\n ...restrictPoints(store, payload),\n };\n }\n}\nexport const updateTable = new UpdateTableAction().bind();\n\nclass SetEditorRectAction<T extends RectType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editorRect: payload,\n };\n }\n}\nexport const setEditorRect = new SetEditorRectAction().bind();\n\nclass SetDragging<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n dragging: payload,\n };\n }\n}\nexport const setDragging = new SetDragging().bind();\n\nclass BlurAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editingAddress: '',\n };\n }\n}\nexport const blur = new BlurAction().bind();\n\nclass CopyAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n return {\n ...store,\n callback: ({ tableReactive: tableRef }) => {\n table.wire.transmit({\n copyingSheetId: table.sheetId,\n copyingZone: payload,\n cutting: false,\n });\n },\n };\n }\n}\nexport const copy = new CopyAction().bind();\n\nclass CutAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n return {\n ...store,\n callback: ({ tableReactive: tableRef }) => {\n table.wire.transmit({\n copyingSheetId: table.sheetId,\n copyingZone: payload,\n cutting: true,\n });\n },\n };\n }\n}\nexport const cut = new CutAction().bind();\n\nclass PasteAction<T extends { matrix: RawCellType[][]; onlyValue: boolean }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { choosing, selectingZone, tableReactive: dstTableRef } = store;\n const dstTable = dstTableRef.current;\n if (!dstTable) {\n return store;\n }\n const { wire } = dstTable;\n const { copyingSheetId, copyingZone, cutting } = wire;\n const srcTable = dstTable.getTableBySheetId(copyingSheetId);\n\n let selectingArea = zoneToArea(selectingZone);\n const copyingArea = zoneToArea(copyingZone);\n const { matrix, onlyValue } = payload;\n\n if (cutting) {\n if (!srcTable) {\n return store;\n }\n const src = copyingArea;\n const { height: h, width: w } = areaShape(copyingArea);\n const dst: AreaType =\n selectingArea.top !== -1\n ? {\n top: selectingArea.top,\n left: selectingArea.left,\n bottom: selectingArea.top + h,\n right: selectingArea.left + w,\n }\n : {\n top: choosing.y,\n left: choosing.x,\n bottom: choosing.y + h,\n right: choosing.x + w,\n };\n\n const nextSelectingZone = restrictZone(areaToZone(dst));\n const newTable = dstTable.move({\n srcTable,\n src,\n dst,\n operator: 'USER',\n undoReflection: {\n sheetId: srcTable.sheetId,\n selectingZone: nextSelectingZone,\n choosing,\n transmit: { copyingSheetId: srcTable.sheetId, copyingZone, cutting: true },\n },\n redoReflection: {\n sheetId: srcTable.sheetId,\n choosing,\n transmit: { copyingSheetId: srcTable.sheetId, copyingZone: resetZone },\n },\n });\n\n return {\n ...store,\n ...initSearchStatement(newTable, store),\n tableReactive: { current: newTable },\n selectingZone: nextSelectingZone,\n inputting: newTable.stringify({ point: choosing, refEvaluation: 'RAW' }),\n callback: ({ tableReactive: tableRef }) => {\n wire.transmit({\n cutting: false,\n copyingZone: resetZone,\n });\n },\n };\n }\n\n let newTable: Table;\n let { y, x } = choosing;\n\n if (copyingArea.top === -1) {\n const { height, width } = matrixShape({ matrix, base: -1 });\n selectingArea = {\n top: y,\n left: x,\n bottom: y + height,\n right: x + width,\n };\n const nextSelectingZone = restrictZone(areaToZone(selectingArea));\n newTable = dstTable.writeRawCellMatrix({\n point: { y, x },\n matrix,\n onlyValue,\n undoReflection: {\n sheetId: dstTable.sheetId,\n selectingZone: nextSelectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: dstTable.sheetId,\n selectingZone: nextSelectingZone,\n choosing,\n },\n });\n } else {\n if (srcTable == null) {\n return store;\n }\n let { height, width } = areaShape(copyingArea);\n if (selectingArea.top !== -1) {\n y = selectingArea.top;\n x = selectingArea.left;\n const superposed = superposeArea(selectingArea, copyingArea);\n height = superposed.height;\n width = superposed.width;\n }\n selectingArea = { top: y, left: x, bottom: y + height, right: x + width };\n newTable = dstTable.copy({\n srcTable,\n src: copyingArea,\n dst: selectingArea,\n onlyValue,\n operator: 'USER',\n undoReflection: {\n sheetId: srcTable.sheetId,\n transmit: { copyingZone },\n choosing,\n selectingZone,\n },\n redoReflection: {\n sheetId: srcTable.sheetId,\n transmit: { copyingSheetId: srcTable.sheetId, copyingZone: resetZone },\n choosing,\n selectingZone: areaToZone(selectingArea),\n },\n });\n }\n\n const nextSelectingZone = restrictZone(areaToZone(selectingArea));\n return {\n ...store,\n tableReactive: { current: newTable },\n selectingZone: nextSelectingZone,\n inputting: newTable.stringify({ point: choosing, refEvaluation: 'RAW' }),\n ...initSearchStatement(newTable, store),\n callback: ({ tableReactive: tableRef }) => {\n wire.transmit({\n copyingZone: resetZone,\n });\n },\n };\n }\n}\nexport const paste = new PasteAction().bind();\n\nclass EscapeAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n return {\n ...store,\n editingAddress: '',\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n callback: ({ tableReactive: tableRef }) => {\n tableRef.current!.wire.transmit({\n copyingZone: resetZone,\n cutting: false,\n });\n },\n };\n }\n}\nexport const escape = new EscapeAction().bind();\n\nclass ChooseAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n choosing: payload,\n entering: true,\n };\n }\n}\nexport const choose = new ChooseAction().bind();\n\nclass SelectAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n selectingZone: payload,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n };\n }\n}\nexport const select = new SelectAction().bind();\n\nclass SelectRowsAction<T extends { range: RangeType; numCols: number }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { range, numCols } = payload;\n const { start, end } = range;\n const selectingZone = {\n startY: start,\n startX: 1,\n endY: end,\n endX: numCols,\n };\n return {\n ...store,\n selectingZone,\n choosing: { y: start, x: 0 },\n leftHeaderSelecting: true,\n topHeaderSelecting: false,\n };\n }\n}\nexport const selectRows = new SelectRowsAction().bind();\n\nclass SelectColsAction<T extends { range: RangeType; numRows: number }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { range, numRows } = payload;\n const { start, end } = range;\n const selectingZone = {\n startY: 1,\n startX: start,\n endY: numRows,\n endX: end,\n };\n\n return {\n ...store,\n selectingZone,\n choosing: { y: 0, x: start },\n leftHeaderSelecting: false,\n topHeaderSelecting: true,\n };\n }\n}\nexport const selectCols = new SelectColsAction().bind();\n\nclass DragAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { startY, startX } = store.selectingZone;\n const selectingZone = {\n startY,\n startX,\n endY: payload.y,\n endX: payload.x,\n };\n if (startY === payload.y && startX === payload.x) {\n selectingZone.endY = -1;\n selectingZone.endX = -1;\n }\n return { ...store, selectingZone };\n }\n}\nexport const drag = new DragAction().bind();\n\nclass SearchAction<T extends number> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { matchingCells } = store;\n let { matchingCellIndex, choosing } = store;\n matchingCellIndex += payload;\n if (matchingCellIndex >= matchingCells.length) {\n matchingCellIndex = 0;\n } else if (matchingCellIndex < 0) {\n matchingCellIndex = matchingCells.length - 1;\n }\n\n if (matchingCells.length > 0) {\n const address = matchingCells[matchingCellIndex];\n choosing = a2p(address);\n }\n return { ...store, matchingCells, matchingCellIndex, choosing };\n }\n}\nexport const search = new SearchAction().bind();\n\nclass WriteAction<T extends { value: string; point?: PointType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n let { value, point } = payload;\n const { choosing, selectingZone, tableReactive: tableRef } = store;\n if (point == null) {\n point = choosing;\n }\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n const newTable = table.write({\n point: point,\n value,\n operator: 'USER',\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing: point,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing: point,\n },\n });\n return {\n ...store,\n ...initSearchStatement(newTable, store),\n tableReactive: { current: newTable },\n callback: ({ tableReactive: tableRef }) => {\n table.wire.transmit({\n copyingZone: resetZone,\n });\n },\n };\n }\n}\nexport const write = new WriteAction().bind();\n\nclass ClearAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { choosing, selectingZone, tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n\n let selectingArea = zoneToArea(selectingZone);\n if (selectingArea.top === -1) {\n const { y, x } = choosing;\n selectingArea = { top: y, left: x, bottom: y, right: x };\n }\n const { top, left, bottom, right } = selectingArea;\n const diff: CellsByAddressType = {};\n let diffCount = 0;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = table.getCellByPoint({ y, x }, 'SYSTEM');\n const address = p2a({ y, x });\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n continue;\n }\n if (cell?.value != null) {\n diff[address] = { value: null };\n diffCount++;\n }\n }\n }\n if (diffCount === 0) {\n return store;\n }\n table.update({\n diff,\n partial: true,\n operator: 'USER',\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n return {\n ...store,\n ...initSearchStatement(table, store),\n tableReactive: { current: table },\n };\n }\n}\nexport const clear = new ClearAction().bind();\n\nclass UndoAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (!table) {\n return store;\n }\n const { history, callback } = table.undo();\n if (history == null) {\n return store;\n }\n if (history.dstSheetId !== table.sheetId) {\n const { dispatch, store: dstStore } = table.wire.contextsBySheetId[history.dstSheetId];\n dispatch(setStore({ ...dstStore, ...history.undoReflection }));\n return store;\n }\n return {\n ...store,\n ...restrictPoints(store, table),\n ...history.undoReflection,\n ...initSearchStatement(table, store),\n tableReactive: { current: table },\n callback,\n };\n }\n}\nexport const undo = new UndoAction().bind();\n\nclass RedoAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n const { history, newTable, callback } = table.redo();\n if (history == null) {\n return store;\n }\n if (history.dstSheetId !== table.sheetId) {\n const { dispatch, store: dstStore } = table.wire.contextsBySheetId[history.dstSheetId];\n dispatch(setStore({ ...dstStore, ...history.redoReflection }));\n return store;\n }\n return {\n ...store,\n ...restrictPoints(store, table),\n ...history.redoReflection,\n ...initSearchStatement(table, store),\n tableReactive: { current: table },\n callback,\n };\n }\n}\nexport const redo = new RedoAction().bind();\n\nclass ArrowAction<\n T extends {\n shiftKey: boolean;\n deltaY: number;\n deltaX: number;\n numRows: number;\n numCols: number;\n },\n> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { shiftKey, deltaY, deltaX, numRows, numCols } = payload;\n const { choosing, tableReactive: tableRef, tabularRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n let { selectingZone } = store;\n const { y, x } = choosing;\n if (shiftKey) {\n const [dragEndY, dragEndX] = [\n selectingZone.endY === -1 ? y : selectingZone.endY,\n selectingZone.endX === -1 ? x : selectingZone.endX,\n ];\n const [nextY, nextX] = [dragEndY + deltaY, dragEndX + deltaX];\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n selectingZone =\n y === nextY && x === nextX\n ? { startY: -1, startX: -1, endY: -1, endX: -1 }\n : { startY: y, startX: x, endY: nextY, endX: nextX };\n return {\n ...store,\n selectingZone,\n };\n }\n const [nextY, nextX] = [y + deltaY, x + deltaX];\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n let { y: editorTop, x: editorLeft, height, width } = store.editorRect;\n if (deltaY > 0) {\n for (let i = y; i < nextY; i++) {\n editorTop += table.getCellByPoint({ y: i, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n }\n } else if (deltaY < 0) {\n for (let i = y - 1; i >= nextY; i--) {\n editorTop -= table.getCellByPoint({ y: i, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n }\n }\n if (deltaX > 0) {\n for (let i = x; i < nextX; i++) {\n editorLeft += table.getCellByPoint({ y: 0, x: i }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n }\n } else if (deltaX < 0) {\n for (let i = x - 1; i >= nextX; i--) {\n editorLeft -= table.getCellByPoint({ y: 0, x: i }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n }\n }\n\n const cell = table.getCellByPoint({ y: nextY, x: nextX }, 'SYSTEM');\n height = cell?.height || DEFAULT_HEIGHT;\n width = cell?.width || DEFAULT_WIDTH;\n\n smartScroll(table, tabularRef.current, { y: nextY, x: nextX });\n return {\n ...store,\n selectingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n choosing: { y: nextY, x: nextX } as PointType,\n editorRect: { y: editorTop, x: editorLeft, height, width },\n };\n }\n}\nexport const arrow = new ArrowAction().bind();\n\nclass WalkAction<\n T extends {\n deltaY: number;\n deltaX: number;\n numRows: number;\n numCols: number;\n },\n> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, numCols } = payload;\n let { deltaY, deltaX } = payload;\n const { choosing, selectingZone, tableReactive: tableRef, tabularRef: gridOuterRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n\n let { y: editorTop, x: editorLeft, height, width } = store.editorRect;\n const { y, x } = choosing;\n const selectingArea = zoneToArea(selectingZone);\n const { top, left, bottom, right } = selectingArea;\n let [nextY, nextX] = [y + deltaY, x + deltaX];\n if (nextY < top && top !== -1) {\n deltaY = bottom - nextY;\n nextY = bottom;\n if (nextX > left) {\n nextX--;\n deltaX--;\n } else {\n deltaX = right - nextX;\n nextX = right;\n }\n }\n if (nextY > bottom && bottom !== -1) {\n deltaY = top - nextY;\n nextY = top;\n if (nextX < right) {\n nextX++;\n deltaX++;\n } else {\n deltaX = left - nextX;\n nextX = left;\n }\n }\n if (nextX < left && left !== -1) {\n deltaX = right - nextX;\n nextX = right;\n if (nextY > top) {\n nextY--;\n deltaY--;\n } else {\n deltaY = bottom - nextY;\n nextY = bottom;\n }\n }\n if (nextX > right && right !== -1) {\n deltaX = left - nextX;\n nextX = left;\n if (nextY < bottom) {\n nextY++;\n deltaY++;\n } else {\n deltaY = top - nextY;\n nextY = top;\n }\n }\n\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n if (deltaY > 0) {\n for (let i = y; i < nextY; i++) {\n editorTop += table.getCellByPoint({ y: i, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n }\n } else if (deltaY < 0) {\n for (let i = y - 1; i >= nextY; i--) {\n editorTop -= table.getCellByPoint({ y: i, x: 0 }, 'SYSTEM')?.height || DEFAULT_HEIGHT;\n }\n }\n if (deltaX > 0) {\n for (let i = x; i < nextX; i++) {\n editorLeft += table.getCellByPoint({ y: 0, x: i }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n }\n } else if (deltaX < 0) {\n for (let i = x - 1; i >= nextX; i--) {\n editorLeft -= table.getCellByPoint({ y: 0, x: i }, 'SYSTEM')?.width || DEFAULT_WIDTH;\n }\n }\n const cell = table.getCellByPoint({ y: nextY, x: nextX }, 'SYSTEM');\n height = cell?.height || DEFAULT_HEIGHT;\n width = cell?.width || DEFAULT_WIDTH;\n smartScroll(table, gridOuterRef.current, { y: nextY, x: nextX });\n return {\n ...store,\n choosing: { y: nextY, x: nextX } as PointType,\n editorRect: { y: editorTop, x: editorLeft, height, width },\n };\n }\n}\nexport const walk = new WalkAction().bind();\n\nclass SetInputtingAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n inputting: payload,\n };\n }\n}\n\nexport const setInputting = new SetInputtingAction().bind();\n\nclass InsertRowsAboveAction<T extends { numRows: number; y: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, y, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n table.insertRows({\n y,\n numRows,\n baseY: y,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n return {\n ...store,\n tableReactive: { current: table },\n };\n }\n}\nexport const insertRowsAbove = new InsertRowsAboveAction().bind();\n\nclass InsertRowsBelowAction<T extends { numRows: number; y: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, y, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing, editorRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n const nextSelectingZone = {\n ...selectingZone,\n startY: selectingZone.startY + numRows,\n endY: selectingZone.endY + numRows,\n };\n const nextChoosing = { ...choosing, y: choosing.y + numRows };\n\n table.insertRows({\n y: y + 1,\n numRows,\n baseY: y,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n },\n });\n return {\n ...store,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n tableReactive: { current: table },\n };\n }\n}\nexport const insertRowsBelow = new InsertRowsBelowAction().bind();\n\nclass InsertColsLeftAction<T extends { numCols: number; x: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numCols, x, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing, editorRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n\n table.insertCols({\n x,\n numCols,\n baseX: x,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n return {\n ...store,\n tableReactive: { current: table },\n };\n }\n}\nexport const insertColsLeft = new InsertColsLeftAction().bind();\n\nclass InsertColsRightAction<T extends { numCols: number; x: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numCols, x, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n const nextSelectingZone = {\n ...selectingZone,\n startX: selectingZone.startX + numCols,\n endX: selectingZone.endX + numCols,\n };\n const nextChoosing = { ...choosing, x: choosing.x + numCols };\n\n selectingZone.startX += numCols;\n selectingZone.endX += numCols;\n\n table.insertCols({\n x: x + 1,\n numCols,\n baseX: x,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n },\n });\n return {\n ...store,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n tableReactive: { current: table },\n };\n }\n}\nexport const insertColsRight = new InsertColsRightAction().bind();\n\nclass RemoveRowsAction<T extends { numRows: number; y: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, y, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing, editorRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n\n table.removeRows({\n y,\n numRows,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n sheetHeight: store.sheetHeight,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n\n return {\n ...store,\n tableReactive: { current: table },\n };\n }\n}\nexport const removeRows = new RemoveRowsAction().bind();\n\nclass RemoveColsAction<T extends { numCols: number; x: number; operator?: OperatorType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numCols, x, operator } = payload;\n const { tableReactive: tableRef, selectingZone, choosing, editorRef } = store;\n const table = tableRef.current;\n if (table == null) {\n return store;\n }\n\n table.removeCols({\n x,\n numCols,\n operator,\n undoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n sheetWidth: store.sheetWidth,\n },\n redoReflection: {\n sheetId: table.sheetId,\n selectingZone,\n choosing,\n },\n });\n\n return {\n ...store,\n tableReactive: { current: table },\n };\n }\n}\nexport const removeCols = new RemoveColsAction().bind();\n\nclass setStoreAction<T extends Partial<StoreType>> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n ...payload,\n };\n }\n}\nexport const setStore = new setStoreAction().bind();\n\nexport const userActions = {\n blur,\n copy,\n cut,\n paste,\n escape,\n choose,\n select,\n selectRows,\n selectCols,\n drag,\n search,\n write,\n clear,\n undo,\n redo,\n arrow,\n walk,\n insertRowsAbove,\n insertRowsBelow,\n insertColsLeft,\n insertColsRight,\n removeRows,\n removeCols,\n};\n","import type { StoreType, AreaType, PointType } from '../types';\n\nimport { zoneToArea } from './structs';\nimport type { Table } from './table';\n\nexport const clip = (store: StoreType) => {\n const { selectingZone, choosing, editorRef, tableReactive: tableRef } = store;\n const table = tableRef.current;\n\n if (!table) {\n return { top: 0, left: 0, bottom: 0, right: 0 };\n }\n\n const { y, x } = choosing;\n const selectingArea = zoneToArea(selectingZone);\n let area = selectingArea;\n if (area.left === -1) {\n area = { top: y, left: x, bottom: y, right: x };\n }\n const input = editorRef.current;\n const trimmed = table.trim(area);\n const tsv = table2tsv(trimmed);\n const html = table2html(trimmed);\n\n if (navigator.clipboard) {\n const tsvBlob = new Blob([tsv], { type: 'text/plain' });\n const htmlBlob = new Blob([html], { type: 'text/html' });\n\n navigator.clipboard.write([\n new ClipboardItem({\n 'text/plain': tsvBlob,\n 'text/html': htmlBlob,\n }),\n ]);\n } else if (input != null) {\n input.value = tsv;\n input.focus();\n input.select();\n document.execCommand('copy');\n input.value = '';\n input.blur();\n }\n return area;\n};\n\nconst table2tsv = (table: Table): string => {\n const lines: string[] = [];\n for (let y = table.top; y <= table.bottom; y++) {\n const cols: string[] = [];\n for (let x = table.left; x <= table.right; x++) {\n const point: PointType = { y, x };\n const policy = table.getPolicyByPoint(point);\n const value = policy.onClip({ point, table });\n if (value.indexOf('\\n') !== -1) {\n cols.push(`\"${value.replace(/\"/g, '\"\"')}\"`);\n } else {\n cols.push(value);\n }\n }\n lines.push(cols.join('\\t'));\n }\n return lines.join('\\n');\n};\n\nconst table2html = (table: Table): string => {\n const lines: string[] = [];\n for (let y = table.top; y <= table.bottom; y++) {\n const cols: string[] = [];\n for (let x = table.left; x <= table.right; x++) {\n const point: PointType = { y, x };\n const policy = table.getPolicyByPoint(point);\n const value = policy.onClip({ point, table });\n const valueEscaped = value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n cols.push(`<td>${valueEscaped}</td>`);\n }\n lines.push(`<tr>${cols.join('')}</tr>`);\n }\n return `<table>${lines.join('')}</table>`;\n};\n","export const escapeSheetName = (name: string): string => {\n const escaped = name.replace(/'/g, \"''\");\n return `'${escaped}'`;\n};\n\nexport const getSheetPrefix = (name?: string): string => {\n if (name) {\n return `${escapeSheetName(name)}!`;\n }\n return '';\n};\n","import type { PointType } from '../types';\nimport type { Table } from './table';\nimport { Lexer, splitRef } from '../formula/evaluator';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH } from '../constants';\nimport { a2p, grantAddressAbsolute } from './converters';\nimport { getSheetPrefix } from './sheet';\n\nexport const insertTextAtCursor = (input: HTMLTextAreaElement, text: string) => {\n input.focus();\n const deprecated = !document.execCommand?.('insertText', false, text);\n if (!deprecated) {\n return;\n }\n input.setRangeText(text, input.selectionStart, input.selectionEnd, 'end');\n return;\n};\n\ntype InsertRefProps = {\n input: HTMLTextAreaElement | null;\n ref: string;\n dryRun?: boolean;\n};\n\nexport const insertRef = ({ input, ref, dryRun = false }: InsertRefProps): boolean => {\n // dryRun is used to check if the ref can be inserted without actually inserting it\n if (!input?.value?.startsWith('=') || input.selectionStart === 0) {\n return false;\n }\n const lexer = new Lexer(input.value.substring(1));\n lexer.tokenize();\n const [tokenIndex, _] = lexer.getTokenIndexByCharPosition(input.selectionStart - 1);\n let token = lexer.tokens[tokenIndex];\n if (token?.type === 'SPACE') {\n token = lexer.tokens[tokenIndex - 1];\n }\n if (\n token == null ||\n token.type === 'OPEN' ||\n token.type === 'COMMA' ||\n token.type === 'INFIX_OPERATOR' ||\n token.type === 'PREFIX_OPERATOR'\n ) {\n if (!dryRun) {\n insertTextAtCursor(input, ref);\n }\n } else if (token.type === 'REF' || token.type === 'RANGE') {\n if (!dryRun) {\n // keep the absolute/relative state of the token\n const { sheetName: refSheetName, addresses: refAddresses } = splitRef(ref);\n const { addresses: tokenAddresses } = splitRef(token.entity as string);\n\n const tokenAbsolutes = tokenAddresses.map((a) => a2p(a));\n if (tokenAddresses.length === 2 && refAddresses.length === 1) {\n refAddresses.push(refAddresses[0]);\n }\n ref =\n getSheetPrefix(refSheetName) +\n refAddresses\n .map((r, i) => {\n return grantAddressAbsolute(r, !!tokenAbsolutes[i]?.absX, !!tokenAbsolutes[i]?.absY);\n })\n .join(':');\n\n const [start, end] = lexer.getTokenPositionRange(tokenIndex + 1, 1);\n input.setSelectionRange(start, end);\n insertTextAtCursor(input, ref);\n }\n } else {\n return false;\n }\n return true;\n};\n\nexport const isRefInsertable = (input: HTMLTextAreaElement | null): boolean => {\n return insertRef({ input, ref: '', dryRun: true });\n};\n\nexport const expandInput = (input: HTMLTextAreaElement | null) => {\n if (input == null) {\n return;\n }\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n};\n\nexport const resetInput = (input: HTMLTextAreaElement | null, table: Table, point: PointType) => {\n const style = input?.style;\n if (style == null) {\n return;\n }\n const width = table.getCellByPoint({ x: point.x, y: 0 }, 'SYSTEM')?.width ?? DEFAULT_WIDTH;\n const height = table.getCellByPoint(point, 'SYSTEM')?.height ?? DEFAULT_HEIGHT;\n style.width = `${width}px`;\n style.height = `${height}px`;\n};\n\nexport const isFocus = (input: HTMLTextAreaElement | null): boolean => {\n if (typeof window === 'undefined' || input == null) {\n return false;\n }\n return document.activeElement === input;\n};\n","export const COLOR_PALETTE = [\n // orange\n '#FF6600',\n // purple\n '#AA44FF',\n // emeraldblue\n '#00CCCC',\n // peach\n '#EEAAEE',\n // yellow\n '#DDDD00',\n // winered\n '#AA4444',\n // lightgreen\n '#00FF00',\n // pink\n '#FF00FF',\n // navy\n '#3366FF',\n];\n","import { useEffect, useState, useRef } from 'react';\n\n// Return the document object with SSR.\nexport const useBrowser = () => {\n const [ok, setOk] = useState(false);\n useEffect(() => {\n setOk(true);\n }, []);\n if (ok && typeof window !== 'undefined') {\n return { window, document };\n }\n return { window: null, document: null };\n};\n\nexport const useDebounce = <T>(value: T, delay = 100) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n const timerRef = useRef<number>();\n\n useEffect(() => {\n timerRef.current = window.setTimeout(() => setDebouncedValue(value), delay);\n return () => {\n window.clearTimeout(timerRef.current);\n };\n }, [value, delay]);\n return debouncedValue;\n};\n\nexport const useDebounceCallback = (callback: (...args: any[]) => void, delay = 100) => {\n const debouncedCallback = useRef(callback);\n const timerRef = useRef<number>();\n\n useEffect(() => {\n debouncedCallback.current = callback;\n }, [callback]);\n\n return (...args: any[]) => {\n window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => {\n debouncedCallback.current(...args);\n }, delay);\n };\n};\n","import type { CSSProperties, FC, ReactNode } from 'react';\nimport { useBrowser } from './hooks';\nimport { createPortal } from 'react-dom';\n\ntype Props = {\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n [attr: string]: any;\n};\n\nexport const Fixed: FC<Props> = ({ children, style, className = '', ...attrs }) => {\n const { document } = useBrowser();\n if (document == null) {\n return null;\n }\n return createPortal(\n <div {...attrs} className={`gs-fixed ${className}`} style={style}>\n {children}\n </div>,\n document.body,\n );\n};\n","import React, { type CSSProperties } from 'react';\nimport type { RawCellType } from '../types';\nexport const parseHTML = (html: string, onlyValue = false): RawCellType[][] => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const results: RawCellType[][] = [];\n\n const processTable = (table: HTMLTableElement) => {\n const spans = new Set<string>();\n const rows = table.querySelectorAll('tr,caption');\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (row.tagName === 'CAPTION') {\n const caption = row.textContent?.trim() ?? '';\n if (caption) {\n results.push([{ value: caption }]);\n }\n continue;\n }\n const cells = Array.from(row.querySelectorAll('td, th'));\n const result: RawCellType[] = [];\n let j = 0;\n for (const cell of cells) {\n const value = cell.textContent?.trim() ?? '';\n const style: CSSProperties | undefined = onlyValue\n ? undefined\n : (() => {\n const childStyle = parseStyleString(cell.firstElementChild);\n const parentStyle = parseStyleString(cell);\n return { ...parentStyle, ...childStyle };\n })();\n while (spans.has(`${i}-${++j}`)) {\n result.push({ value: '', style, skip: true });\n }\n result.push({ value, style });\n\n const rowSpan = parseInt(cell.getAttribute('rowspan') ?? '1', 10);\n const colSpan = parseInt(cell.getAttribute('colspan') ?? '1', 10);\n for (let r = 0; r < rowSpan; r++) {\n for (let c = 0; c < colSpan; c++) {\n spans.add(`${i + r}-${j + c}`);\n }\n }\n }\n results.push(result);\n }\n };\n\n const processNodeSequentially = (node: Node, currentLine: RawCellType[] = []) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName;\n\n if (tagName === 'TABLE') {\n if (currentLine.length > 0) {\n results.push(currentLine.slice());\n currentLine.length = 0;\n }\n processTable(el as HTMLTableElement);\n } else if (tagName === 'BR') {\n results.push(currentLine.slice());\n currentLine.length = 0;\n } else if (blockTags.has(tagName)) {\n if (currentLine.length > 0) {\n results.push(currentLine.slice());\n currentLine.length = 0;\n }\n el.childNodes.forEach((child) => processNodeSequentially(child, currentLine));\n if (currentLine.length > 0) {\n results.push(currentLine.slice());\n currentLine.length = 0;\n }\n } else {\n el.childNodes.forEach((child) => processNodeSequentially(child, currentLine));\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent ?? '';\n const lines = text.split(/\\r?\\n/);\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed) {\n currentLine.push({ value: trimmed });\n }\n }\n }\n };\n\n const currentLine: RawCellType[] = [];\n doc.body.childNodes.forEach((node) => processNodeSequentially(node, currentLine));\n if (currentLine.length > 0) {\n results.push(currentLine);\n }\n\n return results;\n};\n\nfunction parseStyleString(element: Element | null): React.CSSProperties | undefined {\n if (!element) {\n return undefined;\n }\n const styleString = element.getAttribute('style') ?? '';\n const styleObj: React.CSSProperties = {};\n\n styleString.split(';').forEach((d) => {\n let [rawKey, rawValue] = d.split(':');\n if (!rawKey || !rawValue) {\n return;\n }\n rawKey = rawKey.trim();\n if (rawKey === 'height' || rawKey === 'width') {\n return;\n }\n const key = rawKey.trim().replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n if (key === 'float' || key === 'display' || key.startsWith('padding')) {\n return;\n }\n if (key === 'border') {\n Object.assign(styleObj, {\n borderTop: rawValue,\n borderRight: rawValue,\n borderBottom: rawValue,\n borderLeft: rawValue,\n });\n return;\n }\n if (key === 'borderColor') {\n Object.assign(styleObj, {\n borderTopColor: rawValue,\n borderRightColor: rawValue,\n borderBottomColor: rawValue,\n borderLeftColor: rawValue,\n });\n return;\n }\n if (key === 'borderStyle') {\n Object.assign(styleObj, {\n borderTopStyle: rawValue,\n borderRightStyle: rawValue,\n borderBottomStyle: rawValue,\n borderLeftStyle: rawValue,\n });\n return;\n }\n if (key === 'borderWidth') {\n Object.assign(styleObj, {\n borderTopWidth: rawValue,\n borderRightWidth: rawValue,\n borderBottomWidth: rawValue,\n borderLeftWidth: rawValue,\n });\n return;\n }\n const value = rawValue.trim();\n (styleObj as any)[key] = value;\n });\n\n return styleObj;\n}\n\nexport const parseText = (tsv: string, sep = '\\t'): RawCellType[][] => {\n tsv = tsv.replace(/\"\"/g, '\\x00');\n const rows: RawCellType[][] = [[]];\n let row = rows[0];\n let entering = false;\n let word = '';\n for (let i = 0; i < tsv.length; i++) {\n const s = tsv[i];\n if (s === '\\n' && !entering) {\n row.push({ value: restoreDoubleQuote(word) });\n word = '';\n row = [];\n rows.push(row);\n continue;\n }\n if (s === sep) {\n row.push({ value: restoreDoubleQuote(word) });\n word = '';\n continue;\n }\n if (s === '\"' && !entering && word === '') {\n entering = true;\n continue;\n }\n if (s === '\"' && entering) {\n entering = false;\n continue;\n }\n word += s;\n }\n if (word) {\n row.push({ value: restoreDoubleQuote(word) });\n }\n return rows;\n};\n\nconst restoreDoubleQuote = (text: string) => text.replace(/\\x00/g, '\"');\n\nconst blockTags = new Set([\n 'ADDRESS',\n 'ARTICLE',\n 'ASIDE',\n 'BLOCKQUOTE',\n 'DETAILS',\n 'DIALOG',\n 'DD',\n 'DIV',\n 'DL',\n 'DT',\n 'FIELDSET',\n 'FIGCAPTION',\n 'FIGURE',\n 'FOOTER',\n 'FORM',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'H5',\n 'H6',\n 'HEADER',\n 'HR',\n 'LI',\n 'MAIN',\n 'NAV',\n 'OL',\n 'P',\n 'PRE',\n 'SECTION',\n 'TABLE',\n 'UL',\n]);\n","import type { FC, KeyboardEvent } from 'react';\nimport { useContext, useEffect, useState, useCallback, memo } from 'react';\nimport { x2c, y2r } from '../lib/converters';\nimport { clip } from '../lib/clipboard';\nimport {\n clear,\n escape,\n select,\n setEditingAddress,\n undo,\n redo,\n arrow,\n walk,\n write,\n copy,\n cut,\n paste,\n setSearchQuery,\n setEntering,\n setInputting,\n updateTable,\n} from '../store/actions';\n\nimport { Context } from '../store';\nimport { areaToZone, zoneToArea } from '../lib/structs';\nimport * as prevention from '../lib/operation';\nimport { expandInput, insertTextAtCursor, isRefInsertable, resetInput } from '../lib/input';\nimport { Lexer } from '../formula/evaluator';\nimport { COLOR_PALETTE } from '../lib/palette';\nimport { CursorStateType, EditorEventWithNativeEvent, FeedbackType, ModeType } from '../types';\nimport { Fixed } from './Fixed';\nimport { parseHTML, parseText } from '../lib/paste';\nimport React from 'react';\n\ntype Props = {\n mode: ModeType;\n};\n\nexport const Editor: FC<Props> = ({ mode }: Props) => {\n const { store, dispatch } = useContext(Context);\n const [selected, setSelected] = useState(0);\n const [shiftKey, setShiftKey] = useState(false);\n const {\n choosing,\n inputting,\n selectingZone,\n editorRect,\n editingAddress,\n entering,\n matchingCells,\n matchingCellIndex,\n searchQuery,\n editorRef,\n largeEditorRef,\n searchInputRef,\n editingOnEnter,\n tableReactive: tableRef,\n sheetId,\n } = store;\n const table = tableRef.current;\n\n if (!table) {\n return null;\n }\n\n const policy = table.getPolicyByPoint(choosing);\n const optionsAll = policy.getOptions();\n const inputLower = inputting.toLocaleLowerCase();\n const filteredOptions = optionsAll\n .map((option) => {\n const keywords = option.keywords ?? [String(option.value)];\n let bestMatch = { index: -1, startsWith: false, keyword: '' };\n\n for (const keyword of keywords) {\n const keywordLower = keyword.toLowerCase();\n const index = keywordLower.indexOf(inputLower);\n if (index !== -1) {\n const startsWith = keywordLower.startsWith(inputLower);\n if (\n bestMatch.index === -1 ||\n index < bestMatch.index ||\n (index === bestMatch.index && startsWith && !bestMatch.startsWith)\n ) {\n bestMatch = { index, startsWith, keyword };\n }\n }\n }\n\n return {\n option,\n ...bestMatch,\n keywordCount: keywords.length, // Add hierarchy (number of keywords)\n };\n })\n .filter(({ index }) => index !== -1)\n .sort((a, b) => {\n // First priority: starts with input\n if (a.startsWith !== b.startsWith) {\n return b.startsWith ? 1 : -1;\n }\n // Second priority: earlier match position\n if (a.index !== b.index) {\n return a.index - b.index;\n }\n // Third priority: more keywords (higher hierarchy)\n if (a.keywordCount !== b.keywordCount) {\n return b.keywordCount - a.keywordCount;\n }\n // Fourth priority: alphabetical order\n return a.keyword.localeCompare(b.keyword);\n })\n .map(({ option }) => option);\n\n useEffect(() => {\n editorRef?.current?.focus?.({ preventScroll: true });\n }, [editorRef]);\n\n useEffect(() => {\n if (table.wire.lastFocused == null) {\n return;\n }\n if (table.wire.lastFocused !== editorRef.current) {\n return;\n }\n if (table.wire.lastFocused !== largeEditorRef.current) {\n return;\n }\n\n dispatch(setEditingAddress(''));\n }, [table.wire.lastFocused, editorRef, largeEditorRef, dispatch]);\n useEffect(() => {\n table.wire.editingSheetId = sheetId;\n table.wire.editingAddress = editingAddress;\n }, [editingAddress, table, sheetId]);\n\n useEffect(() => {\n //table.wire.transmit();\n expandInput(editorRef.current);\n }, [inputting, editingAddress, editorRef]);\n\n const { y, x } = choosing;\n const rowId = `${y2r(y)}`;\n const colId = x2c(x);\n const address = `${colId}${rowId}`;\n const editing = editingAddress === address;\n\n const cell = table.getCellByPoint({ y, x }, 'SYSTEM');\n const valueString = table.stringify({ point: choosing, cell, refEvaluation: 'RAW' });\n const [before, setBefore] = useState<string>(valueString);\n\n const selectValue = useCallback(\n (selected: number) => {\n const option = filteredOptions[selected];\n if (option) {\n const t = table.update({\n diff: { [address]: { value: option.value } },\n partial: true,\n });\n dispatch(updateTable(t.clone()));\n dispatch(setEditingAddress(''));\n dispatch(setInputting(''));\n setSelected(0);\n }\n },\n [filteredOptions, table, address],\n );\n\n useEffect(() => {\n setBefore(valueString);\n dispatch(setInputting(valueString));\n resetInput(editorRef.current, table, choosing);\n }, [choosing, valueString, dispatch, editorRef, table]);\n\n const { y: top, x: left, height, width } = editorRect;\n\n const writeCell = useCallback(\n (value: string) => {\n if (before !== value) {\n dispatch(write({ value }));\n }\n setBefore(value);\n },\n [before],\n );\n\n const numLines = valueString.split('\\n').length;\n const [isKeyDown, setIsKeyDown] = useState(false);\n const handleKeyDown = useCallback(\n (e: EditorEventWithNativeEvent) => {\n if (isKeyDown) {\n return;\n }\n // do not debounce it if control key is down.\n if (!(e.key === 'Meta' || e.key === 'Control')) {\n setIsKeyDown(true);\n requestAnimationFrame(() => {\n setIsKeyDown(false);\n });\n }\n const input = e.currentTarget;\n\n const shiftKey = e.shiftKey;\n switch (e.key) {\n case 'Tab': // TAB\n e.preventDefault();\n if (editing) {\n if (filteredOptions.length) {\n selectValue(selected);\n } else {\n writeCell(input.value);\n dispatch(setEditingAddress(''));\n dispatch(setInputting(''));\n }\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: shiftKey ? -1 : 1,\n }),\n );\n dispatch(setEditingAddress(''));\n return false;\n\n case 'Enter': // ENTER\n if (editing) {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n dispatch(setInputting(input.value));\n e.preventDefault();\n return false;\n } else {\n if (e.nativeEvent.isComposing) {\n return false;\n }\n if (filteredOptions.length) {\n selectValue(selected);\n } else {\n writeCell(input.value);\n dispatch(setEditingAddress(''));\n dispatch(setInputting(''));\n }\n }\n } else if (editingOnEnter && selectingZone.endY === -1) {\n const dblclick = document.createEvent('MouseEvents');\n dblclick.initEvent('dblclick', true, true);\n input.dispatchEvent(dblclick);\n e.preventDefault();\n return false;\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: shiftKey ? -1 : 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n\n case 'Backspace': // BACKSPACE\n if (!editing) {\n dispatch(clear(null));\n dispatch(setInputting(''));\n return false;\n }\n break;\n case 'Shift': // SHIFT\n setShiftKey(true);\n return false;\n\n case 'Control': // CTRL\n return false;\n\n case 'Alt': // OPTION\n return false;\n\n case 'Meta': // COMMAND\n return false;\n\n case 'NumLock': // NUMLOCK\n return false;\n\n case 'Escape': // ESCAPE\n dispatch(escape(null));\n dispatch(setSearchQuery(undefined));\n dispatch(setInputting(before));\n // input.blur();\n return false;\n\n case 'ArrowLeft': // LEFT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: -1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowUp': // UP\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: -1,\n deltaX: 0,\n }),\n );\n return false;\n }\n if (filteredOptions.length > 1) {\n if (selected <= 0) {\n setSelected(filteredOptions.length - 1);\n } else {\n setSelected(selected - 1);\n }\n return true;\n }\n break;\n case 'ArrowRight': // RIGHT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: 1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowDown': // DOWN\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n return false;\n }\n if (filteredOptions.length > 1) {\n if (selected >= filteredOptions.length - 1) {\n setSelected(0);\n } else {\n setSelected(selected + 1);\n }\n return true;\n }\n break;\n case 'a': // A\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(\n select({\n startY: 1,\n startX: 1,\n endY: table.getNumRows(),\n endX: table.getNumCols(),\n }),\n );\n return false;\n }\n }\n break;\n case 'c': // C\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(copy(areaToZone(area)));\n input.focus(); // refocus\n return false;\n }\n return true;\n }\n break;\n case 'f': // F\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (typeof searchQuery === 'undefined') {\n dispatch(setSearchQuery(''));\n }\n dispatch(setEntering(false));\n requestAnimationFrame(() => searchInputRef.current!.focus());\n return false;\n }\n }\n break;\n case 'r': // R\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(redo(null));\n requestAnimationFrame(() => dispatch(setInputting(''))); // resetting textarea\n return false;\n }\n }\n break;\n case 's': // S\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n table.wire.onSave?.({\n table,\n points: {\n pointing: choosing,\n selectingFrom: {\n y: selectingZone.startY,\n x: selectingZone.startX,\n },\n selectingTo: {\n y: selectingZone.endY,\n x: selectingZone.endX,\n },\n },\n });\n return false;\n }\n }\n break;\n case 'v': // V\n if (e.ctrlKey || e.metaKey) {\n // moved to onPaste\n e.stopPropagation();\n return false;\n }\n break;\n case 'x': // X\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(cut(areaToZone(area)));\n input.focus(); // refocus\n\n return false;\n }\n }\n break;\n case 'z': // Z\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (e.shiftKey) {\n dispatch(redo(null));\n //window.setTimeout(() => sync(setInputting('')), 100); // resetting textarea\n } else {\n dispatch(undo(null));\n }\n return false;\n }\n }\n break;\n case ';': // semicolon\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n // MAYBE: need to aware timezone.\n writeCell(new Date().toDateString());\n }\n }\n break;\n }\n if (e.ctrlKey || e.metaKey) {\n return false;\n }\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return false;\n }\n dispatch(setEditingAddress(address));\n if (!editing) {\n dispatch(setInputting(''));\n }\n setSelected(0);\n return false;\n },\n [\n isKeyDown,\n editing,\n filteredOptions,\n selected,\n editingOnEnter,\n selectingZone,\n before,\n table,\n choosing,\n store,\n cell,\n address,\n writeCell,\n searchQuery,\n ],\n );\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n table.wire.lastFocused = e.currentTarget;\n },\n [table],\n );\n\n const handleDoubleClick = useCallback(\n (e: React.MouseEvent<HTMLTextAreaElement>) => {\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return;\n }\n const input = e.currentTarget;\n if (!editing) {\n dispatch(setInputting(valueString));\n dispatch(setEditingAddress(address));\n requestAnimationFrame(() => {\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n const length = new String(valueString).length;\n input.setSelectionRange(length, length);\n });\n }\n },\n [cell, editing, valueString, address],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n if (isRefInsertable(e.currentTarget)) {\n return true;\n } else {\n if (editing) {\n writeCell(e.currentTarget.value);\n }\n }\n dispatch(setEditingAddress(''));\n },\n [editing, writeCell],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n return;\n }\n dispatch(setInputting(e.currentTarget.value));\n setSelected(0);\n },\n [cell],\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (editing) {\n return true;\n }\n\n const onlyValue = shiftKey;\n const html = e.clipboardData?.getData?.('text/html');\n if (html) {\n dispatch(paste({ matrix: parseHTML(html), onlyValue }));\n } else {\n const text = e.clipboardData?.getData?.('text/plain');\n if (text) {\n dispatch(paste({ matrix: parseText(text), onlyValue }));\n } else {\n console.warn('No clipboard data found.');\n }\n }\n e.preventDefault();\n e.stopPropagation();\n return false;\n },\n [editing, shiftKey],\n );\n\n const handleKeyUpInternal = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n setShiftKey(false);\n const selectingArea = zoneToArea(store.selectingZone);\n table.wire.onKeyUp?.({\n e,\n points: {\n pointing: choosing,\n selectingFrom: { y: selectingArea.top, x: selectingArea.left },\n selectingTo: { y: selectingArea.bottom, x: selectingArea.right },\n },\n });\n },\n [store.selectingZone, choosing],\n );\n\n const handleOptionMouseDown = useCallback(\n (e: React.MouseEvent<HTMLLIElement>, index: number) => {\n selectValue(index);\n e.preventDefault();\n e.stopPropagation();\n return false;\n },\n [selectValue],\n );\n\n return (\n <Fixed\n className={`gs-editor ${editing ? 'gs-editing' : ''}`}\n style={editing ? { top, left, height } : {}}\n {...{\n 'data-mode': mode,\n 'data-sheet-id': sheetId,\n }}\n >\n <div className={`gs-cell-label ${editing ? ' gs-hidden' : ''}`}>{address}</div>\n <div className=\"gs-editor-inner\" style={{ width }}>\n <pre\n className=\"gs-editor-hl\"\n style={{\n //...cell?.style,\n height: editorRef.current?.scrollHeight,\n width: (editorRef.current?.scrollWidth ?? 0) - 4,\n }}\n >\n {cell?.disableFormula ? inputting : editorStyle(inputting)}\n </pre>\n <textarea\n data-sheet-id={sheetId}\n name=\"gs-editor-input\"\n data-size=\"small\"\n autoFocus={true}\n spellCheck={false}\n draggable={false}\n ref={editorRef}\n rows={numLines}\n onFocus={handleFocus}\n style={{ minWidth: width, minHeight: height }}\n onDoubleClick={handleDoubleClick}\n onBlur={handleBlur}\n value={inputting}\n onChange={handleChange}\n onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUpInternal}\n />\n </div>\n <ul className=\"gs-editor-options\" style={{ marginTop: editorRef.current?.scrollHeight }}>\n {filteredOptions.map((option, i) => (\n <li\n key={i}\n className={`gs-editor-option ${selected === i ? ' gs-editor-option-selected' : ''}`}\n onMouseDown={(e) => handleOptionMouseDown(e, i)}\n >\n {option.label ?? option.value}\n </li>\n ))}\n </ul>\n </Fixed>\n );\n};\n\n// Memoized token span component to prevent unnecessary re-renders\nconst TokenSpan = memo<{\n token: any;\n tokenKey: string;\n color?: string;\n className?: string;\n}>(\n ({ token, tokenKey, color, className }) => {\n return (\n <span key={tokenKey} style={color ? { color } : undefined} className={className}>\n {token.stringify()}\n </span>\n );\n },\n (prevProps, nextProps) => {\n // Custom comparison to prevent unnecessary re-renders\n return (\n prevProps.tokenKey === nextProps.tokenKey &&\n prevProps.color === nextProps.color &&\n prevProps.className === nextProps.className &&\n prevProps.token.stringify() === nextProps.token.stringify()\n );\n },\n);\n\nexport const editorStyle = (text: string) => {\n if (text[0] !== '=') {\n return <>{text}</>;\n }\n\n const lexer = new Lexer(text.substring(1));\n lexer.tokenize();\n let palletIndex = 0;\n const exists: { [ref: string]: number } = {};\n\n // Create a simple hash of the formula for stable keys\n const formulaHash = text.split('').reduce((hash, char) => {\n return ((hash << 5) - hash + char.charCodeAt(0)) & 0xffffffff;\n }, 0);\n\n return (\n <>\n =\n {lexer.tokens.map((token, i) => {\n // Handle SPACE tokens differently - render as plain text\n if (token.type === 'SPACE') {\n return <React.Fragment key={`${formulaHash}-SPACE-${i}`}>{token.stringify()}</React.Fragment>;\n }\n\n // Create a stable key based on formula hash, token content and index\n const tokenKey = `${formulaHash}-${token.type}-${token.stringify()}-${i}`;\n\n if (token.type === 'REF' || token.type === 'RANGE') {\n const normalizedToken = token.stringify();\n const existsIndex = exists[normalizedToken];\n if (existsIndex !== undefined) {\n return (\n <TokenSpan\n key={tokenKey}\n token={token}\n tokenKey={tokenKey}\n color={COLOR_PALETTE[existsIndex % COLOR_PALETTE.length]}\n />\n );\n }\n const color = COLOR_PALETTE[palletIndex % COLOR_PALETTE.length];\n exists[normalizedToken] = palletIndex++;\n return (\n <TokenSpan\n key={tokenKey}\n token={token}\n tokenKey={tokenKey}\n color={color}\n className={`gs-token-type-${token.type}`}\n />\n );\n }\n\n return (\n <TokenSpan\n key={tokenKey}\n token={token}\n tokenKey={tokenKey}\n className={`gs-token-type-${token.type} gs-token-entity-type-${typeof token.entity}`}\n />\n );\n })}\n </>\n );\n};\n","import type { ReactNode } from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport type { StoreType } from '../types';\nimport type { Dispatcher } from '../store';\n\nexport type PluginContextType = {\n provided: boolean;\n store?: StoreType;\n sync?: Dispatcher;\n setStore: (store: StoreType) => void;\n setSync: (sync: Dispatcher) => void;\n};\n\nexport const PluginContext = createContext({} as PluginContextType);\n\nexport function useInitialPluginContext(): PluginContextType {\n const [store, setStore] = useState<StoreType | undefined>(undefined);\n const [sync, setSync] = useState<Dispatcher>();\n return {\n provided: true,\n store,\n sync,\n setStore,\n setSync,\n };\n}\n\nexport function usePluginContext(): [boolean, PluginContextType] {\n const ctx = useContext(PluginContext);\n if (ctx?.provided == null) {\n return [false, ctx];\n }\n return [true, ctx];\n}\n\nexport function usePluginDispatch() {\n const sync = useContext(PluginContext);\n if (!sync) {\n return undefined;\n }\n return sync;\n}\n\ntype Props = {\n children: ReactNode;\n context: PluginContextType;\n};\n\nexport function PluginBase({ children, context }: Props) {\n const [provided] = usePluginContext();\n if (provided) {\n return <>{children}</>;\n }\n return <PluginContext.Provider value={context}>{children}</PluginContext.Provider>;\n}\n","import type { FC, MutableRefObject } from 'react';\nimport { createRef, useContext, useEffect, useRef, useState } from 'react';\n\nimport type { OptionsType, Props, Connector } from '../types';\nimport { Context } from '../store';\n\nimport { setStore, updateTable } from '../store/actions';\n\nimport { usePluginContext } from './PluginBase';\nimport { Table } from '../lib/table';\n\ntype StoreObserverProps = OptionsType & {\n sheetName?: string;\n connector?: MutableRefObject<Connector | null>;\n};\n\nexport const createConnector = () => createRef<Connector | null>();\nexport const useConnector = () => useRef<Connector | null>(null);\nexport const StoreObserver: FC<StoreObserverProps> = ({\n sheetName,\n sheetHeight,\n sheetWidth,\n connector,\n editingOnEnter,\n showAddress,\n mode,\n}) => {\n const { store, dispatch } = useContext(Context);\n const { tableReactive: tableRef } = store;\n const table = tableRef.current;\n\n useEffect(() => {\n if (!table) {\n return;\n }\n if (sheetName && sheetName !== table.sheetName) {\n table.sheetName = sheetName;\n table.wire.sheetIdsByName[sheetName] = table.sheetId;\n delete table.wire.sheetIdsByName[table.prevSheetName];\n table.prevSheetName = sheetName;\n //hub.transmit();\n }\n }, [sheetName]);\n\n useEffect(() => {\n if (!table) {\n return;\n }\n const { wire } = table;\n requestAnimationFrame(() => wire.identifyFormula());\n wire.contextsBySheetId[table.sheetId] = { store, dispatch };\n wire.transmit();\n\n if (connector) {\n connector.current = {\n tableManager: {\n table,\n sync: (table) => {\n dispatch(updateTable(table as Table));\n },\n },\n storeManager: {\n store,\n sync: (store) => {\n dispatch(setStore(store));\n },\n dispatch,\n },\n };\n }\n }, [store, table, connector]);\n\n useEffect(() => {\n if (sheetHeight) {\n dispatch(setStore({ sheetHeight }));\n }\n }, [sheetHeight, dispatch]);\n useEffect(() => {\n if (sheetWidth) {\n dispatch(setStore({ sheetWidth }));\n }\n }, [sheetWidth]);\n useEffect(() => {\n if (typeof editingOnEnter !== 'undefined') {\n dispatch(setStore({ editingOnEnter }));\n }\n }, [editingOnEnter]);\n useEffect(() => {\n if (typeof showAddress !== 'undefined') {\n dispatch(setStore({ showAddress }));\n }\n }, [showAddress]);\n\n useEffect(() => {\n if (mode) {\n dispatch(setStore({ mode }));\n }\n }, [mode]);\n\n const [pluginProvided, pluginContext] = usePluginContext();\n useEffect(() => {\n if (!pluginProvided) {\n return;\n }\n pluginContext.setStore(store);\n pluginContext.setSync(() => dispatch);\n }, [store, pluginProvided, pluginContext]);\n\n return <></>;\n};\n","import { useContext } from 'react';\nimport type { MouseEvent } from 'react';\n\nimport { Context } from '../store';\nimport { setResizingPositionY, setResizingPositionX, updateTable, setStore } from '../store/actions';\n\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, MIN_WIDTH, MIN_HEIGHT } from '../constants';\nimport { zoneToArea, makeSequence, between } from '../lib/structs';\nimport type { CellsByAddressType } from '../types';\nimport { p2a } from '../lib/converters';\n\nexport const Resizer = () => {\n const { store, dispatch } = useContext(Context);\n const {\n resizingPositionY: posY,\n resizingPositionX: posX,\n tableReactive: tableRef,\n leftHeaderSelecting,\n topHeaderSelecting,\n selectingZone,\n editorRef,\n mainRef,\n } = store;\n const table = tableRef.current;\n\n const [y, startY, endY] = posY;\n const [x, startX, endX] = posX;\n\n if (mainRef.current == null || editorRef.current == null || !table) {\n return <div className=\"gs-resizing gs-hidden\" />;\n }\n\n const cell = table.getCellByPoint({ y: y === -1 ? 0 : y, x: x === -1 ? 0 : x }, 'SYSTEM');\n const { y: offsetY, x: offsetX } = mainRef.current.getBoundingClientRect();\n\n const baseWidth = cell?.width || DEFAULT_WIDTH;\n const baseHeight = cell?.height || DEFAULT_HEIGHT;\n\n const width = baseWidth + (endX - startX);\n const height = baseHeight + (endY - startY);\n\n const handleResizeEnd = () => {\n const selectingArea = zoneToArea(selectingZone);\n const { top, left, bottom, right } = selectingArea;\n const diff: CellsByAddressType = {};\n if (x !== -1) {\n let xs = [x];\n if (topHeaderSelecting && between({ start: left, end: right }, x)) {\n xs = makeSequence(left, right + 1);\n }\n xs.forEach((x) => {\n diff[p2a({ y: 0, x })] = { width };\n });\n }\n if (y !== -1) {\n let ys = [y];\n if (leftHeaderSelecting && between({ start: top, end: bottom }, y)) {\n ys = makeSequence(top, bottom + 1);\n }\n ys.forEach((y) => {\n diff[p2a({ y, x: 0 })] = { height };\n });\n }\n table.update({\n diff,\n partial: true,\n operator: 'USER',\n undoReflection: { selectingZone, sheetId: table.sheetId },\n });\n dispatch(\n setStore({\n tableReactive: { current: table },\n }),\n );\n dispatch(setResizingPositionY([-1, -1, -1]));\n dispatch(setResizingPositionX([-1, -1, -1]));\n editorRef.current!.focus();\n };\n const handleResizeMove = (e: MouseEvent) => {\n if (y !== -1) {\n let endY = e.clientY;\n const height = baseHeight + (endY - startY);\n if (height < MIN_HEIGHT) {\n endY += MIN_HEIGHT - height;\n }\n dispatch(setResizingPositionY([y, startY, endY]));\n } else if (x !== -1) {\n let endX = e.clientX;\n const width = baseWidth + (endX - startX);\n if (width < MIN_WIDTH) {\n endX += MIN_WIDTH - width;\n }\n dispatch(setResizingPositionX([x, startX, endX]));\n }\n };\n\n return (\n <div\n className={`gs-resizing ${y === -1 && x === -1 ? 'gs-hidden' : ''}`}\n onMouseUp={handleResizeEnd}\n onMouseMove={handleResizeMove}\n >\n <div className={`gs-line-vertical ${x === -1 ? 'gs-hidden' : ''}`}>\n <div className={'gs-line'} style={{ width: 1, height: '100%', left: endX - offsetX }}>\n <span style={{ left: '-50%' }}>{width}px</span>\n </div>\n </div>\n <div className={`gs-line-horizontal ${y === -1 ? 'gs-hidden' : ''}`}>\n <div className={'gs-line'} style={{ width: '100%', height: 1, top: endY - offsetY }}>\n <span style={{ top: '-50%' }}>{height}px</span>\n </div>\n </div>\n </div>\n );\n};\n","import type { FC } from 'react';\nimport { useContext, useEffect, useRef } from 'react';\nimport { Context } from '../store';\n\nexport const Emitter: FC = () => {\n const { store } = useContext(Context);\n const { choosing: pointing, selectingZone: zone, tableReactive } = store;\n const table = tableReactive.current;\n\n useEffect(() => {\n if (table?.isInitialized && table.wire.onChange) {\n table.wire.onChange({\n table,\n points: {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n },\n });\n }\n }, [tableReactive]);\n\n useEffect(() => {\n if (table && table.wire.onSelect) {\n table.wire.onSelect({\n table,\n points: {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n },\n });\n }\n }, [pointing, zone]);\n return null;\n};\n","import type { ContextMenuProps, RawCellType } from '../types';\nimport { areaToZone, zoneShape, zoneToArea } from '../lib/structs';\nimport {\n copy,\n cut,\n paste,\n undo,\n redo,\n insertRowsAbove,\n insertRowsBelow,\n insertColsLeft,\n insertColsRight,\n removeRows,\n removeCols,\n} from './actions';\nimport { clip } from '../lib/clipboard';\nimport { parseHTML, parseText } from '../lib/paste';\n\nexport const copier = async ({ store, dispatch }: ContextMenuProps) => {\n const { editorRef } = store;\n const area = clip(store);\n dispatch(copy(areaToZone(area)));\n editorRef.current?.focus();\n};\n\nexport const cutter = async ({ store, dispatch }: ContextMenuProps) => {\n const { editorRef } = store;\n const area = clip(store);\n dispatch(cut(areaToZone(area)));\n editorRef.current?.focus();\n};\n\nexport const paster = async ({ store, dispatch }: ContextMenuProps, onlyValue = false) => {\n const { editorRef } = store;\n const items = await navigator.clipboard.read();\n let cells: RawCellType[][] = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item.types.indexOf('text/html') !== -1) {\n const blob = await item.getType('text/html');\n const html = await blob.text();\n if (html) {\n cells = parseHTML(html, onlyValue);\n break;\n }\n } else if (item.types.indexOf('text/plain') !== -1) {\n const blob = await item.getType('text/plain');\n const text = await blob.text();\n if (text) {\n cells = parseText(text);\n break;\n }\n }\n }\n dispatch(paste({ matrix: cells, onlyValue }));\n editorRef.current?.focus();\n};\n\nexport const undoer = async ({ store, dispatch }: ContextMenuProps) => {\n const { editorRef } = store;\n dispatch(undo(null));\n editorRef.current?.focus();\n};\n\nexport const redoer = async ({ store, dispatch }: ContextMenuProps) => {\n const { editorRef } = store;\n dispatch(redo(null));\n editorRef.current?.focus();\n};\n\nexport const rowsInserterAbove = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { top } = zoneToArea(selectingZone);\n const numRows = zoneShape({ ...selectingZone, base: 1 }).height;\n dispatch(insertRowsAbove({ numRows, y: top, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const rowsInserterBelow = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { bottom } = zoneToArea(selectingZone);\n const numRows = zoneShape({ ...selectingZone, base: 1 }).height;\n dispatch(insertRowsBelow({ numRows, y: bottom, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const colsInserterLeft = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { left } = zoneToArea(selectingZone);\n const numCols = zoneShape({ ...selectingZone, base: 1 }).width;\n dispatch(insertColsLeft({ numCols, x: left, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const colsInserterRight = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { right } = zoneToArea(selectingZone);\n const numCols = zoneShape({ ...selectingZone, base: 1 }).width;\n dispatch(insertColsRight({ numCols, x: right, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const rowsRemover = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { top } = zoneToArea(selectingZone);\n const numRows = zoneShape({ ...selectingZone, base: 1 }).height;\n dispatch(removeRows({ numRows, y: top, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const colsRemover = async ({ store, dispatch }: ContextMenuProps) => {\n const { selectingZone, editorRef } = store;\n const { left } = zoneToArea(selectingZone);\n const numCols = zoneShape({ ...selectingZone, base: 1 }).width;\n dispatch(removeCols({ numCols, x: left, operator: 'USER' }));\n editorRef.current?.focus();\n};\n\nexport const syncers = {\n copy: copier,\n cut: cutter,\n paste: paster,\n undo: undoer,\n redo: redoer,\n insertRowsAbove: rowsInserterAbove,\n insertRowsBelow: rowsInserterBelow,\n insertColsLeft: colsInserterLeft,\n insertColsRight: colsInserterRight,\n removeRows: rowsRemover,\n removeCols: colsRemover,\n};\n","import { type FC, useContext, useRef } from 'react';\n\nimport { setContextMenuPosition } from '../store/actions';\nimport { zoneShape } from '../lib/structs';\n\nimport { Context } from '../store';\nimport * as prevention from '../lib/operation';\nimport { Fixed } from './Fixed';\nimport {\n colsInserterLeft,\n colsInserterRight,\n colsRemover,\n copier,\n cutter,\n paster,\n redoer,\n rowsInserterAbove,\n rowsInserterBelow,\n rowsRemover,\n undoer,\n} from '../store/dispatchers';\nimport type { ContextMenuProps } from '../types';\n\nexport const ContextMenu = () => {\n const { store, dispatch } = useContext(Context);\n const { contextMenuPosition, contextMenuItems } = store;\n const { y: top, x: left } = contextMenuPosition;\n if (top === -1) {\n return null;\n }\n return (\n <Fixed\n className=\"gs-contextmenu-modal\"\n onClick={(e: MouseEvent) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n return false;\n }}\n >\n <div className={'gs-contextmenu'} style={{ top: top, left: left }}>\n <ul>\n {contextMenuItems.map((Item, index) => {\n return <Item key={index} store={store} dispatch={dispatch} />;\n })}\n </ul>\n </div>\n </Fixed>\n );\n};\n\nexport const DividerItem = (props: ContextMenuProps) => {\n return <li className=\"gs-menu-divider\" />;\n};\n\nexport const CutItem = (props: ContextMenuProps) => {\n return (\n <li className=\"gs-enabled\" data-testid=\"cut-item\" onClick={async () => await cutter(props)}>\n <div className=\"gs-menu-name\">Cut</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">X</span>\n </div>\n </li>\n );\n};\n\nexport const CopyItem = (props: ContextMenuProps) => {\n return (\n <li className=\"gs-enabled\" data-testid=\"copy-item\" onClick={async () => await copier(props)}>\n <div className=\"gs-menu-name\">Copy</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">C</span>\n </div>\n </li>\n );\n};\n\nexport const PasteItem = (props: ContextMenuProps) => {\n return (\n <li className=\"gs-enabled\" data-testid=\"paste-item\" onClick={async () => await paster(props, false)}>\n <div className=\"gs-menu-name\">Paste</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">V</span>\n </div>\n </li>\n );\n};\n\nexport const PasteOnlyValueItem = (props: ContextMenuProps) => {\n return (\n <li className=\"gs-enabled\" data-testid=\"paste-only-value-item\" onClick={async () => await paster(props, true)}>\n <div className=\"gs-menu-name\">Paste only value</div>\n <div className=\"gs-menu-shortcut\">\n Shift + <span className=\"gs-menu-underline\">V</span>\n </div>\n </li>\n );\n};\n\nexport const RowsColsOperationDividerItem = (props: ContextMenuProps) => {\n const { leftHeaderSelecting, topHeaderSelecting } = props.store;\n if (leftHeaderSelecting || topHeaderSelecting) {\n return <li className=\"gs-menu-divider\" />;\n }\n return null;\n};\n\nexport const InsertRowsAboveItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, leftHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!leftHeaderSelecting || !table) {\n return null;\n }\n const { y } = choosing;\n const { height } = zoneShape({ ...selectingZone, base: 1 });\n const selectingTopCell = table.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const disabled =\n (table.maxNumRows !== -1 && table.getNumRows() + height > table.maxNumRows) ||\n prevention.hasOperation(selectingTopCell?.prevention, prevention.InsertRowsAbove);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"insert-rows-above-item\"\n onClick={async (e) => {\n if (!disabled) {\n await rowsInserterAbove(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {height} row{height > 1 && 's'} above\n </div>\n </li>\n );\n};\n\nexport const InsertRowsBelowItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, leftHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!leftHeaderSelecting || !table) {\n return null;\n }\n const { y } = choosing;\n const { height } = zoneShape({ ...selectingZone, base: 1 });\n const selectingBottomCell = table.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const disabled =\n (table.maxNumRows !== -1 && table.getNumRows() + height > table.maxNumRows) ||\n prevention.hasOperation(selectingBottomCell?.prevention, prevention.InsertRowsBelow);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"insert-rows-below-item\"\n onClick={async (e) => {\n if (!disabled) {\n await rowsInserterBelow(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {height} row{height > 1 && 's'} below\n </div>\n </li>\n );\n};\n\nexport const InsertColsLeftItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, topHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!topHeaderSelecting || !table) {\n return null;\n }\n const { x } = choosing;\n const { width } = zoneShape({ ...selectingZone, base: 1 });\n const selectingLeftCell = table.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const disabled =\n (table.maxNumCols !== -1 && table.getNumCols() + width > table.maxNumCols) ||\n prevention.hasOperation(selectingLeftCell?.prevention, prevention.InsertColsLeft);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"insert-cols-left-item\"\n onClick={async (e) => {\n if (!disabled) {\n await colsInserterLeft(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {width} column{width > 1 && 's'} left\n </div>\n </li>\n );\n};\n\nexport const InsertColsRightItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, topHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!topHeaderSelecting || !table) {\n return null;\n }\n const { x } = choosing;\n const { width } = zoneShape({ ...selectingZone, base: 1 });\n const selectingRightCell = table.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const disabled =\n (table.maxNumCols !== -1 && table.getNumCols() + width > table.maxNumCols) ||\n prevention.hasOperation(selectingRightCell?.prevention, prevention.InsertColsRight);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"insert-cols-right-item\"\n onClick={async (e) => {\n if (!disabled) {\n await colsInserterRight(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {width} column{width > 1 && 's'} right\n </div>\n </li>\n );\n};\n\nexport const RemoveRowsItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, leftHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!leftHeaderSelecting || !table) {\n return null;\n }\n const { y } = choosing;\n const { height } = zoneShape({ ...selectingZone, base: 1 });\n const selectingTopCell = table.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const disabled =\n (table.minNumRows !== -1 && table.getNumRows() - height < table.minNumRows) ||\n prevention.hasOperation(selectingTopCell?.prevention, prevention.RemoveRows);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"remove-rows-item\"\n onClick={async (e) => {\n if (!disabled) {\n await rowsRemover(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Remove {height} row{height > 1 && 's'}\n </div>\n </li>\n );\n};\n\nexport const RemoveColsItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef, choosing, selectingZone, topHeaderSelecting } = props.store;\n const table = tableRef.current;\n\n if (!topHeaderSelecting || !table) {\n return null;\n }\n const { x } = choosing;\n const { width } = zoneShape({ ...selectingZone, base: 1 });\n const selectingRightCell = table.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const disabled =\n (table.minNumCols !== -1 && table.getNumCols() - width < table.minNumCols) ||\n prevention.hasOperation(selectingRightCell?.prevention, prevention.RemoveCols);\n return (\n <li\n className={disabled ? 'gs-disabled' : 'gs-enabled'}\n data-testid=\"remove-cols-item\"\n onClick={async (e) => {\n if (!disabled) {\n await colsRemover(props);\n }\n }}\n >\n <div className=\"gs-menu-name\">\n Remove {width} column{width > 1 && 's'}\n </div>\n </li>\n );\n};\n\nexport const HistoryDeviderItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef } = props.store;\n const table = tableRef.current;\n\n if (!table) {\n return null;\n }\n\n const historyIndex = table.getHistoryIndex();\n if (historyIndex > -1 || historyIndex < table.getHistorySize() - 1) {\n return <li className=\"gs-menu-divider\" />;\n }\n return null;\n};\n\nexport const UndoItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef } = props.store;\n const table = tableRef.current;\n\n if (!table) {\n return null;\n }\n\n const historyIndex = table.getHistoryIndex();\n if (historyIndex <= -1) {\n return null;\n }\n return (\n <li className=\"gs-enabled\" data-testid=\"undo-item\" onClick={async () => undoer(props)}>\n <div className=\"gs-menu-name\">Undo</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">Z</span>\n </div>\n </li>\n );\n};\n\nexport const RedoItem = (props: ContextMenuProps) => {\n const { tableReactive: tableRef } = props.store;\n const table = tableRef.current;\n\n if (!table) {\n return null;\n }\n\n const historyIndex = table.getHistoryIndex();\n if (historyIndex >= table.getHistorySize() - 1) {\n return null;\n }\n return (\n <li className=\"gs-enabled\" data-testid=\"redo-item\" onClick={async () => redoer(props)}>\n <div className=\"gs-menu-name\">Redo</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">R</span>\n </div>\n </li>\n );\n};\n\nexport const defaultContextMenuItems: FC<ContextMenuProps>[] = [\n CutItem,\n CopyItem,\n PasteItem,\n PasteOnlyValueItem,\n\n RowsColsOperationDividerItem,\n\n InsertRowsAboveItem,\n InsertRowsBelowItem,\n InsertColsLeftItem,\n InsertColsRightItem,\n RemoveRowsItem,\n RemoveColsItem,\n\n HistoryDeviderItem,\n\n UndoItem,\n RedoItem,\n];\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",o=t+\"|\"+i,r=e[o];return r||(r=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+\"-\"+r[1]+\"-\"+r[2]+\" \"+l+\":\"+r[4]+\":\"+r[5]+\":000\",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n,i=this.utcOffset(),a=this.toDate(),u=a.toLocaleString(\"en-US\",{timeZone:t}),f=Math.round((a-new Date(u))/1e3/60),s=15*-Math.round(a.getTimezoneOffset()/15)-f;if(!Number(s))n=this.utcOffset(0,e);else if(n=o(u,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,\"minute\")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if(\"string\"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));","import { CellType } from '../types';\nimport { TimeDelta } from '../lib/time';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc.js';\nimport timezone from 'dayjs/plugin/timezone.js';\ndayjs.extend(timezone);\ndayjs.extend(utc);\n\ntype Condition = (value: string) => boolean;\ntype Stringify = (value: string) => any;\n\ntype Props = {\n condition?: Condition;\n complement?: Stringify;\n mixins?: ParserMixinType[];\n};\n\nconst BOOLS = { true: true, false: false } as { [s: string]: boolean };\nconst NUMS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);\nconst NUMS_Z = new Set([...NUMS, 'Z', 'z']);\nconst JFMASOND = new Set(['J', 'F', 'M', 'A', 'S', 'O', 'N', 'D', ...NUMS]);\nconst NBRYNLGPTVC = new Set(['N', 'B', 'R', 'Y', 'N', 'L', 'G', 'P', 'T', 'V', 'C', ...NUMS_Z]);\n\nexport interface ParserMixinType {\n functions?: ((value: string, cell?: CellType) => any)[];\n callback?(parsed: any, cell?: CellType): CellType;\n parse?(value: string, cell: CellType): any;\n any?(value: string, cell?: CellType): string | undefined;\n bool?(value: string, cell?: CellType): boolean | undefined;\n number?(value: string, cell?: CellType): number | undefined;\n timedelta?(value: string, cell?: CellType): TimeDelta | undefined;\n date?(value: string, cell?: CellType): Date | undefined;\n}\n\nexport class Parser implements ParserMixinType {\n functions!: ((value: string, cell?: CellType) => any)[];\n private condition?: Condition;\n private complement?: Stringify;\n\n constructor(props?: Props) {\n this.applyMixins(props?.mixins);\n\n if (!this.functions) {\n this.functions = [\n this.number.bind(this),\n this.timedelta.bind(this),\n this.date.bind(this),\n this.bool.bind(this),\n this.any.bind(this),\n ];\n }\n\n if (props != null) {\n const { condition, complement } = props;\n this.condition = condition;\n this.complement = complement;\n }\n }\n\n private applyMixins(mixins?: ParserMixinType[]) {\n if (!mixins) {\n return;\n }\n\n for (const mixin of mixins) {\n for (const key in mixin) {\n if (key === 'functions' && Array.isArray(mixin.functions)) {\n if (!this.functions) {\n this.functions = [];\n }\n this.functions.push(...mixin.functions);\n } else {\n (this as any)[key] = (mixin as any)[key];\n }\n }\n }\n }\n\n public call(value: string, cell: CellType): CellType {\n try {\n const parsed = this.parse(value, cell);\n return this.callback(parsed, cell);\n } catch (e) {\n return this.callback(String(e), cell);\n }\n }\n\n public callback(parsed: any, cell?: CellType): CellType {\n return { ...cell, value: parsed };\n }\n\n public parse(value: string, cell?: CellType): any {\n if (this.condition && !this.condition(value)) {\n const result = this.complement ? this.complement(value) : value;\n return result;\n }\n if (value[0] === \"'\") {\n return value;\n }\n for (let i = 0; i < this.functions.length; i++) {\n const result = this.functions[i](value, cell);\n if (result != null) {\n return result;\n }\n }\n if (value === '') {\n return null;\n }\n return value;\n }\n\n any(value: string, cell?: CellType): string | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n return value;\n }\n\n bool(value: string, cell?: CellType): boolean | undefined {\n return BOOLS[value.toLowerCase()];\n }\n\n number(value: string, cell?: CellType): number | undefined {\n const m = value.match(/^-?[\\d.]+$/);\n if (m != null && value.match(/\\.$/) == null && (value.match(/\\./g) || []).length <= 1) {\n return parseFloat(value);\n }\n }\n\n timedelta(value: string, cell?: CellType): TimeDelta | undefined {\n if (value.length < 4 || isNaN(value[value.length - 1] as unknown as number)) {\n return;\n }\n return TimeDelta.parse(value);\n }\n\n date(value: string, cell?: CellType): Date | undefined {\n const first = value[0];\n if (first == null || !JFMASOND.has(first.toUpperCase())) {\n return;\n }\n if (!NBRYNLGPTVC.has(value[value.length - 1].toUpperCase())) {\n return;\n }\n if (value.match(/[=*&#@!?[\\]{}\"'()|%\\\\<>~+\\r\\n]/)) {\n return;\n }\n let timeZone = 'UTC';\n try {\n timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (e) {}\n try {\n const day = dayjs.tz(value, timeZone);\n return day.toDate();\n } catch (e) {}\n }\n}\n\nexport type ParserType = Parser;\n\nexport const defaultParser = new Parser();\n","import { Special } from '../constants';\nimport { Table } from '../lib/table';\nimport { Id, MatrixType, PointType, RefEvaluation } from '../types';\nimport { FormulaError, Lexer, Parser } from './evaluator';\n\nconst SOLVING = new Special('solving');\n\ntype SolveFormulaProps = {\n value: any;\n table: Table;\n raise?: boolean;\n refEvaluation?: RefEvaluation;\n origin: PointType;\n};\n\nexport const solveFormula = ({ value, table, raise = true, refEvaluation = 'TABLE', origin }: SolveFormulaProps) => {\n if (refEvaluation === 'SYSTEM') {\n return value;\n }\n let solved = value;\n\n if (typeof value === 'string') {\n if (value.charAt(0) === '=') {\n try {\n const lexer = new Lexer(value.substring(1), { origin });\n lexer.tokenize();\n const parser = new Parser(lexer.tokens);\n if (refEvaluation === 'RAW') {\n return '=' + lexer.display({ table });\n }\n const expr = parser.build();\n solved = expr?.evaluate?.({ table });\n } catch (e) {\n table.setSolvedCache(origin, e);\n if (raise) {\n throw e;\n }\n return undefined;\n }\n }\n }\n if (refEvaluation === 'COMPLETE' && solved instanceof Table) {\n solved = solveTable({ table: solved, raise })[0][0];\n } else {\n table.setSolvedCache(origin, solved);\n }\n return solved;\n};\n\ntype SolveTableProps = {\n table: Table;\n raise?: boolean;\n refEvaluation?: RefEvaluation;\n};\n\nexport const solveTable = ({ table, raise = true }: SolveTableProps): MatrixType => {\n const area = table.getArea();\n return table.getFieldMatrix({ area, refEvaluation: 'SYSTEM', field: 'value' }).map((row, i) => {\n const y = area.top + i;\n return row.map((value, j) => {\n const x = area.left + j;\n const point = { y, x };\n const cache = table.getSolvedCache(point);\n\n try {\n if (cache === SOLVING) {\n throw new FormulaError('#REF!', 'References are circulating.', new Error(value as string));\n } else if (cache instanceof FormulaError) {\n throw cache;\n } else if (cache != null) {\n return cache;\n }\n table.setSolvedCache(point, SOLVING);\n const solved = solveFormula({ value, table, raise, origin: point, refEvaluation: 'COMPLETE' });\n table.setSolvedCache(point, solved);\n return solved;\n } catch (e) {\n table.setSolvedCache(point, e);\n if (raise) {\n throw e;\n }\n return e;\n }\n });\n });\n};\n\nexport type StripTableProps = {\n value: any;\n y?: number;\n x?: number;\n raise?: boolean;\n history?: Set<Id>;\n};\n\nexport const stripTable = ({ value, y = 0, x = 0, raise = true, history = new Set() }: StripTableProps): any => {\n if (value instanceof Table) {\n const id = value.getId({ x, y });\n if (history.has(id)) {\n const e = new FormulaError('#REF!', 'References are circulating.');\n if (raise) {\n throw e;\n }\n return e;\n }\n history.add(id);\n value = solveTable({ table: value, raise })[y][x];\n if (value instanceof Table) {\n return stripTable({ value, y, x, raise, history });\n }\n }\n return value;\n};\n","import dayjs from 'dayjs';\n\nimport { CellType, PointType, WriterType } from '../types';\nimport { Table, UserTable } from '../lib/table';\nimport { solveFormula, solveTable } from '../formula/solver';\nimport { FormulaError } from '../formula/evaluator';\nimport { TimeDelta } from '../lib/time';\nimport { stripTable } from '../formula/solver';\n\ntype Condition = (value: any) => boolean;\n\ntype Stringify = (value: any) => string;\n\nexport type Props = {\n condition?: Condition;\n complement?: Stringify;\n mixins?: RendererMixinType[];\n};\n\nexport type RendererCallProps = {\n table: Table;\n point: PointType;\n sync?: (table: UserTable) => void;\n};\n\nexport type RenderProps<T extends any = any> = {\n value: T;\n cell?: CellType<T>;\n table: Table;\n point: PointType;\n sync?: (table: UserTable) => void;\n};\n\nexport interface RendererMixinType {\n datetimeFormat?: string;\n dateFormat?: string;\n timeDeltaFormat?: string;\n\n decorate?(rendered: any, props: RenderProps): any;\n render?(props: RenderProps): any;\n stringify?(props: RenderProps): string;\n string?(props: RenderProps<string>): any;\n table?(props: RenderProps<Table>): any;\n bool?(props: RenderProps<boolean>): any;\n number?(props: RenderProps<number>): any;\n date?(props: RenderProps<Date>): any;\n timedelta?(props: RenderProps<TimeDelta>): any;\n array?(props: RenderProps<any[]>): any;\n object?(props: RenderProps<any>): any;\n null?(props: RenderProps<null | undefined>): any;\n}\n\nexport class Renderer implements RendererMixinType {\n public datetimeFormat: string = 'YYYY-MM-DD HH:mm:ss';\n public dateFormat: string = 'YYYY-MM-DD';\n public timeDeltaFormat: string = 'HH:mm:ss';\n private condition?: Condition;\n private complement?: Stringify;\n\n constructor(props?: Props) {\n this.applyMixins(props?.mixins);\n if (props == null) {\n return;\n }\n const { condition, complement } = props;\n this.condition = condition;\n this.complement = complement;\n }\n\n private applyMixins(mixins?: RendererMixinType[]) {\n if (mixins == null) {\n return;\n }\n for (const mixin of mixins) {\n for (const key in mixin) {\n (this as any)[key] = (mixin as any)[key];\n }\n }\n }\n\n public call(props: RendererCallProps): any {\n const { point: origin, table, sync } = props;\n const key = table.getId(origin);\n const cell = table.getById(key) ?? {};\n const cache = table.getSolvedCache(origin);\n let value = cache;\n if (cache === undefined) {\n if (typeof cell?.value === 'string' && !cell?.disableFormula) {\n if (cell.value[0] === \"'\") {\n value = cell.value.substring(1);\n } else {\n value = solveFormula({ value: cell.value, table, raise: true, origin });\n }\n } else {\n value = cell?.value;\n }\n }\n const rendered = this.render({ value, cell, table, sync, point: origin });\n return this.decorate(rendered, { ...props, value, cell });\n }\n\n public decorate(rendered: any, props: RenderProps): any {\n return rendered;\n }\n\n public render(props: RenderProps): any {\n const { cell, table, point } = props;\n const value = props.value;\n\n if (this.condition && !this.condition(value)) {\n return this.complement ? this.complement(value) : this.stringify(props);\n }\n if (value == null) {\n return this.null(props);\n }\n\n switch (typeof value) {\n case 'object':\n if (value instanceof Table) {\n return this.table(props);\n }\n if (value instanceof Date) {\n return this.date(props);\n }\n if (TimeDelta.is(value)) {\n return this.timedelta({ value: TimeDelta.ensure(value), cell, table, point });\n }\n if (Array.isArray(value)) {\n return this.array(props);\n }\n if (value instanceof FormulaError) {\n throw value;\n }\n return this.object(props);\n case 'string':\n return this.string(props);\n case 'number':\n return this.number(props);\n case 'boolean':\n return this.bool(props);\n case 'function':\n return value() as string;\n }\n return '';\n }\n\n stringify({ value, cell, table, point }: RenderProps): string {\n if (value === undefined) {\n value = cell?.value;\n }\n if (value instanceof Date) {\n return this.date({ value, cell, table, point });\n }\n if (TimeDelta.is(value)) {\n const ensured = TimeDelta.ensure(value);\n return this.timedelta({ value: ensured, cell: { ...cell, value: ensured }, table, point });\n }\n if (value == null) {\n return '';\n }\n if (value instanceof FormulaError) {\n return '';\n }\n if (value instanceof Error) {\n return '';\n }\n return value.toString();\n }\n\n string({ value }: RenderProps<string>): any {\n return value!;\n }\n\n table(props: RenderProps<Table>): any {\n let { value: table } = props;\n const value = stripTable({ value: table });\n return this.render({ ...props, table, value });\n }\n\n bool({ value }: RenderProps<boolean>): any {\n return value ? 'TRUE' : 'FALSE';\n }\n\n number({ value }: RenderProps<number>): any {\n if (isNaN(value!)) {\n return 'NaN';\n }\n return value;\n }\n\n date({ value }: RenderProps<Date>): any {\n if (value!.getHours() + value!.getMinutes() + value!.getSeconds() === 0) {\n return dayjs(value).format(this.dateFormat);\n }\n return dayjs(value).format(this.datetimeFormat);\n }\n\n timedelta({ value }: RenderProps<TimeDelta>) {\n return value!.stringify(this.timeDeltaFormat);\n }\n\n array(props: RenderProps<any[]>): any {\n let { value } = props;\n return value!.map((v) => this.stringify(props)).join(',');\n }\n\n object({ value }: RenderProps<any>): any {\n return JSON.stringify(value);\n }\n\n null({}: RenderProps<null | undefined>): any {\n return '';\n }\n}\n\nexport type RendererType = Renderer;\nexport const defaultRenderer = new Renderer();\n","import { Table } from '../../lib/table';\nimport type { PointType } from '../../types';\nimport { Expression } from '../evaluator';\n\nexport type FunctionProps = {\n args: Expression[];\n table: Table;\n origin?: PointType;\n};\n\nexport class BaseFunction {\n public example = '_BASE()';\n public helpTexts = [\"Function's description.\"];\n public helpArgs = [{ name: 'value1', description: '' }];\n protected bareArgs: any[];\n protected table: Table;\n protected origin?: PointType;\n\n constructor({ args, table, origin }: FunctionProps) {\n this.bareArgs = args.map((a) => a.evaluate({ table }));\n this.table = table;\n this.origin = origin;\n }\n protected validate() {}\n\n public call() {\n this.validate();\n\n // @ts-expect-error main is not defined in BaseFunction\n\n return this.main(...this.bareArgs);\n }\n}\n\nexport type FunctionMapping = { [functionName: string]: typeof BaseFunction };\n","import { stripTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { FormulaError } from '../evaluator';\nimport dayjs from 'dayjs';\nimport { FULLDATE_FORMAT_UTC } from '../../constants';\n\nexport const gt = (left: any, right: any): boolean => {\n if (typeof left === 'string' || typeof right === 'string') {\n return ensureString(left) > ensureString(right);\n }\n try {\n return ensureNumber(left) > ensureNumber(right);\n } catch {\n return false;\n }\n};\n\nexport const gte = (left: any, right: any): boolean => {\n if (typeof left === 'string' || typeof right === 'string') {\n return ensureString(left) >= ensureString(right);\n }\n try {\n return ensureNumber(left) >= ensureNumber(right);\n } catch {\n return false;\n }\n};\n\nexport const lt = (left: any, right: any): boolean => {\n return !gte(left, right);\n};\n\nexport const lte = (left: any, right: any): boolean => {\n return !gt(left, right);\n};\n\nexport const eq = (left: any, right: any): boolean => {\n return ensureString(left) === ensureString(right);\n};\n\nexport const ne = (left: any, right: any): boolean => {\n return !eq(left, right);\n};\n\nexport type EnsureNumberOptions = {\n alternative?: number;\n ignore?: boolean;\n};\n\nexport type EnsureBooleanOptions = {\n alternative?: boolean;\n ignore?: boolean;\n};\n\nexport const ensureNumber = (value: any, options?: EnsureNumberOptions): number => {\n const { alternative, ignore } = options || {};\n if (typeof value === 'undefined' && typeof alternative !== 'undefined') {\n return alternative;\n }\n if (!value) {\n // falsy is 0\n return 0;\n }\n if (value instanceof Table) {\n const v = stripTable({ value });\n return ensureNumber(v, { alternative });\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const num = parseFloat(value.slice(0, -1));\n if (!isNaN(num)) {\n return num / 100;\n }\n }\n\n const num = parseFloat(value as string);\n if (isNaN(num)) {\n if (ignore) {\n return 0;\n }\n throw new FormulaError('#VALUE!', `${value} cannot be converted to a number`);\n }\n return num;\n};\n\nexport const ensureString = (value: any): string => {\n if (value === 0) {\n return '0';\n }\n if (!value) {\n return '';\n }\n if (value instanceof Table) {\n const v = stripTable({ value });\n return ensureString(v);\n }\n switch (value.constructor.name) {\n case 'Date': {\n const d: Date = value;\n return dayjs(d).format(FULLDATE_FORMAT_UTC);\n }\n default:\n return String(value);\n }\n};\n\nexport const ensureBoolean = (value: any, options?: EnsureBooleanOptions): boolean => {\n const { alternative, ignore } = options ?? {};\n if (typeof value === 'undefined' && typeof alternative !== 'undefined') {\n return alternative;\n }\n if (value === null) {\n return false;\n }\n if (value instanceof Table) {\n const v = stripTable({ value });\n return ensureBoolean(v, options);\n }\n if (typeof value === 'string' || value instanceof String) {\n const bool = { true: true, false: false }[value.toLowerCase()];\n if (bool == null) {\n if (ignore) {\n return false;\n }\n throw new FormulaError('#VALUE!', `text '${value as string}' cannot be converted to a boolean`);\n }\n return bool;\n }\n return Boolean(value);\n};\n\nconst CONDITION_REGEX = /^(<=|>=|<>|>|<|=)?(.*)$/;\n\nexport const check = (value: any, condition: string): boolean => {\n const m = condition.match(CONDITION_REGEX);\n\n const [, expr = '', target = ''] = m || [];\n let comparison: any = target;\n if (expr === '>' || expr === '<' || expr === '>=' || expr === '<=') {\n if (typeof value === 'number') {\n comparison = parseFloat(target);\n }\n switch (expr) {\n case '>':\n return gt(value, comparison);\n case '>=':\n return gte(value, comparison);\n case '<':\n return lt(value, comparison);\n case '<=':\n return lte(value, comparison);\n }\n }\n\n const equals = expr === '' || expr === '=';\n if (target === '') {\n // empty target means \"\" or \"<>\"\n return (value == null || value === '') === equals;\n }\n\n if (typeof value === 'string' || value instanceof String) {\n const replaced = target\n .replace(/~\\*/g, '(\\\\*)')\n .replace(/~\\?/g, '(\\\\?)')\n .replace(/\\*/g, '(.*)')\n .replace(/\\?/g, '(.)');\n const regex = RegExp(`^${replaced}$`, 'i');\n return regex.test(value as string) === equals;\n }\n return eq(value, comparison) === equals;\n};\n","import dayjs from 'dayjs';\n\nimport { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\nimport { Table } from '../../lib/table';\nimport { TimeDelta } from '../../lib/time';\nimport { SECONDS_IN_DAY } from '../../constants';\n\nexport class AddFunction extends BaseFunction {\n example = 'ADD(2, 3)';\n helpText = ['Returns the sum of two numbers.', \"This is the same as the '+' operator.\"];\n helpArgs = [\n { name: 'value1', description: 'First additive.' },\n { name: 'value2', description: 'Second additive.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ADD is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n arg = stripTable({ value: arg });\n }\n return typeof arg === 'object' ? arg : ensureNumber(arg);\n });\n }\n\n protected main(v1: number | Date | TimeDelta, v2: number | Date | TimeDelta) {\n if (typeof v1 === 'number' && typeof v2 === 'number') {\n return v1 + v2;\n }\n if (v1 instanceof Date && TimeDelta.is(v2)) {\n return TimeDelta.ensure(v2).add(v1);\n }\n if (TimeDelta.is(v1) && v2 instanceof Date) {\n return TimeDelta.ensure(v1).add(v2);\n }\n if (v1 instanceof Date && typeof v2 === 'number') {\n return dayjs(v1)\n .add(v2 * SECONDS_IN_DAY, 'second')\n .toDate();\n }\n if (typeof v1 === 'number' && v2 instanceof Date) {\n return dayjs(v2)\n .add(v1 * SECONDS_IN_DAY, 'second')\n .toDate();\n }\n try {\n return ensureNumber(v1, { alternative: 0 }) + ensureNumber(v2, { alternative: 0 });\n } catch (e) {\n throw new FormulaError('#VALUE!', 'Mismatched types for augend or addend.');\n }\n }\n}\n","import dayjs from 'dayjs';\n\nimport { FormulaError } from '../evaluator';\nimport { TimeDelta } from '../../lib/time';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\nimport { Table } from '../../lib/table';\nimport { SECONDS_IN_DAY } from '../../constants';\n\nexport class MinusFunction extends BaseFunction {\n example = 'MINUS(8, 3)';\n helpText = ['Returns the difference of two numbers.', \"This is the same as the '-' operator.\"];\n helpArgs = [\n { name: 'value1', description: 'A number that will be subtracted.' },\n { name: 'value2', description: 'A number that will subtract from value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for MINUS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n arg = stripTable({ value: arg });\n }\n return typeof arg === 'object' ? arg : ensureNumber(arg);\n });\n }\n\n protected main(v1: number | Date | TimeDelta, v2: number | Date | TimeDelta) {\n if (typeof v1 === 'number' && typeof v2 === 'number') {\n return v1 - v2;\n }\n if (v1 instanceof Date && v2 instanceof Date) {\n return new TimeDelta(v1, v2);\n }\n if (v1 instanceof Date && TimeDelta.is(v2)) {\n return TimeDelta.ensure(v2).sub(v1);\n }\n if (TimeDelta.is(v1) && v2 instanceof Date) {\n return TimeDelta.ensure(v1).sub(v2);\n }\n if (v1 instanceof Date && typeof v2 === 'number') {\n return dayjs(v1)\n .subtract(v2 * SECONDS_IN_DAY, 'second')\n .toDate();\n }\n try {\n return ensureNumber(v1, { alternative: 0 }) - ensureNumber(v2, { alternative: 0 });\n } catch (e) {\n throw new FormulaError('#VALUE!', 'Mismatched types for minuend or subtrahend.');\n }\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class MultiplyFunction extends BaseFunction {\n example = 'MULTIPLY(6, 7)';\n helpText = ['Returns the product of two numbers.', \"This is the same as the '*' operator.\"];\n helpArgs = [\n { name: 'factor1', description: 'First factor.' },\n { name: 'factor2', description: 'Second factor.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for MULTIPLY is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(v1: number, v2: number) {\n return v1 * v2;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class DivideFunction extends BaseFunction {\n example = 'DIVIDE(4, 2)';\n helpText = ['Returns the result of dividing one number by another.', \"This is the same as the '/' operator.\"];\n helpArgs = [\n {\n name: 'dividend',\n description: 'A number that will be divided by divisor.',\n },\n { name: 'divisor', description: 'A number that will divide a dividend.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for DIVIDE is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[1] === 0) {\n throw new FormulaError('#DIV/0!', 'The second argument must be non-zero.');\n }\n }\n\n protected main(divided: number, divisor: number) {\n return divided / divisor;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class ModFunction extends BaseFunction {\n example = 'MOD(10, 4)';\n helpText = ['Returns the result of the modulo operation.'];\n helpArgs = [\n {\n name: 'dividend',\n description: 'A number that will be divided by divisor.',\n },\n { name: 'divisor', description: 'A number that will divide a dividend.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for MOD is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[1] === 0) {\n throw new FormulaError('#DIV/0!', 'The second argument must be non-zero.');\n }\n }\n\n protected main(v1: number, v2: number) {\n // https://stackoverflow.com/questions/4467539/javascript-modulo-gives-a-negative-result-for-negative-numbers\n return ((v1 % v2) + v2) % v2;\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\nimport { FormulaError } from '../evaluator';\n\nexport class SumFunction extends BaseFunction {\n example = 'SUM(A2:A100, 101)';\n helpText = ['Returns the sum of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n throw new FormulaError('#N/A', 'One or more arguments are required.');\n }\n const spreaded: number[] = [];\n this.bareArgs.forEach((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .map((v) => ensureNumber(v, { ignore: true })),\n );\n return;\n }\n spreaded.push(ensureNumber(arg, { ignore: true }));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n if (values.length === 0) {\n return 0;\n }\n return values.reduce((a, b) => a + b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class ConcatFunction extends BaseFunction {\n example = 'CONCAT(\"Hello\", \"World\")';\n helpText = ['Returns the concatenation of two values.', \"This is the same as the '&' operator.\"];\n helpArgs = [\n { name: 'value1', description: 'A value to be concatenated with value2.' },\n { name: 'value2', description: 'A value to be concatenated with value1' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for CONCAT is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureString(arg));\n }\n\n protected main(v1: string, v2: string) {\n return v1 + v2;\n }\n}\n","import { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class ConcatenateFunction extends BaseFunction {\n example = 'CONCATENATE(\"Hello\", \"World\")';\n helpText = ['Returns the concatenation of the values.'];\n helpArgs = [\n { name: 'value1', description: 'First string value.' },\n {\n name: 'value2',\n description: 'Additional string values to be concatenated with the value1',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n this.bareArgs = this.bareArgs.map((arg) => ensureString(arg));\n }\n\n protected main(...values: string[]) {\n return values.reduce((a, b) => a + b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { eq } from './__utils';\n\nexport class EqFunction extends BaseFunction {\n example = 'EQ(6, 7)';\n helpText = [\n 'Returns TRUE if the two specified values are equal, FALSE if they are not.',\n \"This is the same as the '=' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for EQ is incorrect.');\n }\n }\n\n protected main(v1: any, v2: any) {\n return eq(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ne } from './__utils';\n\nexport class NeFunction extends BaseFunction {\n example = 'NE(6, 7)';\n helpText = [\n 'Returns TRUE if the two specified values are not equal, FALSE if they are.',\n \"This is the same as the '<>' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for NE is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return ne(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { gt } from './__utils';\n\nexport class GtFunction extends BaseFunction {\n example = 'GT(5, 3)';\n helpText = [\n 'Returns TRUE if the first argument is truly greater than the second, FALSE otherwise.',\n \"This is the same as the '>' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for GT is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return gt(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { gte } from './__utils';\n\nexport class GteFunction extends BaseFunction {\n example = 'GTE(5, 3)';\n helpText = [\n 'Returns TRUE if the first argument is greater than the second, FALSE otherwise.',\n \"This is the same as the '>=' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for GTE is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return gte(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { lt } from './__utils';\n\nexport class LtFunction extends BaseFunction {\n example = 'LT(3, 6)';\n helpText = [\n 'Returns TRUE if the first argument is truely less than the second argument, FALSE otherwise.',\n \"This is the same as the '<' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for LT is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return lt(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { lte } from './__utils';\n\nexport class LteFunction extends BaseFunction {\n example = 'LTE(3, 6)';\n helpText = [\n 'Returns TRUE if the first argument is less than the second argument, FALSE otherwise.',\n \"This is the same as the '<=' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for LTE is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return lte(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class NowFunction extends BaseFunction {\n example = 'NOW()';\n helpText = ['Returns a serial value corresponding to the current date and time.'];\n helpArgs = [];\n\n protected validate() {\n if (this.bareArgs.length !== 0) {\n throw new FormulaError('#N/A', 'Number of arguments for NOW is incorrect.');\n }\n }\n\n protected main() {\n return new Date();\n }\n}\n","import { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class AndFunction extends BaseFunction {\n example = 'AND(A1=1, A2=2)';\n helpText = ['Returns TRUE if all arguments are logically TRUE.', 'Returns FALSE if any argument is logically FALSE.'];\n helpArgs = [\n { name: 'expression1', description: 'First logical expression.' },\n {\n name: 'expression2',\n description: 'Additional expressions',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n this.bareArgs = this.bareArgs.map((arg) => ensureBoolean(arg));\n }\n\n protected main(...values: boolean[]) {\n return values.reduce((a, b) => a && b);\n }\n}\n","import { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class OrFunction extends BaseFunction {\n example = 'OR(A1=1, A2=2)';\n helpText = ['Returns TRUE if any argument is logically true.', 'Returns FALSE if all arguments are logically false.'];\n helpArgs = [\n { name: 'expression1', description: 'First logical expression.' },\n {\n name: 'expression2',\n description: 'Additional expressions',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n this.bareArgs = this.bareArgs.map((arg) => ensureBoolean(arg));\n }\n\n protected main(...values: boolean[]) {\n return values.reduce((a, b) => a || b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class IfFunction extends BaseFunction {\n example = 'IF(A2 = \"Human\", \"Hello\", \"World\")';\n helpText = [\n 'If the logical expression is TRUE, the second argument is returned.',\n 'If FALSE, the third argument is returned.',\n ];\n helpArgs = [\n { name: 'condition', description: 'An expression as a condition' },\n {\n name: 'value1',\n description: 'value to be returned if the condition is true.',\n },\n {\n name: 'value2',\n description: 'value to be returned if the condition is false.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 2 || this.bareArgs.length === 3) {\n this.bareArgs[0] = ensureBoolean(this.bareArgs[0]);\n return;\n }\n throw new FormulaError('#N/A', 'Number of arguments for IF is incorrect. 2 or 3 arguments must be specified.');\n }\n\n protected main(condition: boolean, v1: any, v2: any = false) {\n return condition ? v1 : v2;\n }\n}\n","// DO NOT COPY THIS CODE FOR THE OTHER.\n\nimport { Table } from '../../lib/table';\nimport { Expression, FormulaError } from '../evaluator';\nimport { FunctionProps } from './__base';\nimport { stripTable } from '../../formula/solver';\n\nexport class IfErrorFunction {\n example = 'IFERROR(A1, \"Error in cell A1\")';\n helpText = [\n 'Returns the first argument if it is not an error value, otherwise returns the second argument if present, or a blank if the second argument is absent.',\n ];\n helpArgs = [\n {\n name: 'value',\n description: 'The value to return if value itself is not an error.',\n },\n {\n name: 'value_if_error',\n description: 'The value the function returns if value is an error.',\n optional: true,\n },\n ];\n private args: Expression[];\n private table: Table;\n\n constructor({ args, table }: FunctionProps) {\n this.args = args;\n this.table = table;\n }\n\n protected validate() {\n if (this.args.length === 1 || this.args.length === 2) {\n return;\n }\n throw new FormulaError(\n '#N/A',\n 'Number of arguments for IFERROR is incorrect. 1 or 2 argument(s) must be specified.',\n );\n }\n\n public call() {\n this.validate();\n const [value, valueIfError] = this.args;\n\n try {\n return stripTable({ value: value.evaluate({ table: this.table }) });\n } catch (e) {\n return stripTable({ value: valueIfError?.evaluate({ table: this.table }) });\n }\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class NotFunction extends BaseFunction {\n example = 'NOT(TRUE)';\n helpText = ['Returns the inverse of the Boolean; if TRUE, NOT returns FALSE.', 'If FALSE, NOT returns TRUE.'];\n helpArgs = [\n {\n name: 'logical expression',\n description: 'A logical expression as a boolean.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 1) {\n this.bareArgs[0] = ensureBoolean(this.bareArgs[0]);\n return;\n }\n throw new FormulaError('#N/A', 'Number of arguments for NOT is incorrect. 1 argument must be specified.');\n }\n\n protected main(v1: boolean) {\n return !v1;\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class CountFunction extends BaseFunction {\n example = 'COUNT(A2:A100,B2:B100,4,26)';\n helpText = ['Returns the count of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: any[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(...solveTable({ table: arg }).reduce((a, b) => a.concat(b)));\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: any[]) {\n return values.filter((v) => typeof v === 'number').length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { check, ensureString } from './__utils';\n\nexport class CountifFunction extends BaseFunction {\n example = 'COUNTIF(A1:A10,\">20\")';\n helpText = ['Returns the count of a series of cells.'];\n helpArgs = [\n { name: 'range', description: 'Target range.' },\n {\n name: 'condition',\n description: 'A condition for count.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for COUNTIF is incorrect.');\n }\n this.bareArgs[1] = ensureString(this.bareArgs[1]);\n }\n\n protected main(table: Table, condition: string) {\n const matrix = solveTable({ table });\n return matrix.reduce((a, b) => a.concat(b)).filter((v: any) => check(v, condition)).length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { check, ensureString } from './__utils';\nimport { stripTable } from '../../formula/solver';\nimport { AreaType } from '../../types';\n\nexport class SumifFunction extends BaseFunction {\n example = 'SUMIF(A1:A10,\">20\")';\n helpText = ['Returns the sum of a series of cells.'];\n helpArgs = [\n { name: 'range1', description: 'A condition range.' },\n {\n name: 'condition',\n description: 'A condition for summarization.',\n },\n {\n name: 'range2',\n description: 'A range to be summarized.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2 && this.bareArgs.length !== 3) {\n throw new FormulaError('#N/A', 'Number of arguments for SUMIF is incorrect.');\n }\n if (this.bareArgs[2] != undefined && this.bareArgs[2] instanceof Table) {\n throw new FormulaError('#N/A', '3rd argument must be range.');\n }\n this.bareArgs[1] = ensureString(this.bareArgs[1]);\n }\n\n protected main(range: Table, condition: string, sumRange: Table) {\n if (!(range instanceof Table)) {\n return check(range, condition) ? range : 0;\n }\n const conditionMatrix = solveTable({ table: range });\n let sumMatrix = conditionMatrix;\n if (sumRange) {\n const [top, left] = [sumRange.top, sumRange.left];\n const area: AreaType = {\n top,\n left,\n bottom: top + sumRange.getNumRows(),\n right: left + sumRange.getNumCols(),\n };\n sumMatrix = solveTable({ table: this.table.trim(area) });\n }\n let total = 0;\n conditionMatrix.forEach((row, y) =>\n row.forEach((c, x) => {\n const s = stripTable({ value: sumMatrix[y]?.[x] ?? 0 });\n if (typeof s === 'number' && check(c, condition)) {\n total += s;\n }\n }),\n );\n return total;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean, ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\n\nexport class VlookupFunction extends BaseFunction {\n example = 'VLOOKUP(10003, A2:B26, 2, FALSE)';\n helpText = [\n 'Searches vertically for the specified key in the first column of the range and returns the value of the specified cell in the same row.',\n ];\n helpArgs = [\n { name: 'key', description: 'Search key.' },\n {\n name: 'range',\n description: 'A range for search',\n },\n {\n name: 'index',\n description: 'The index of the column in the range.',\n },\n {\n name: 'is_sorted',\n description:\n 'FALSE: Exact match. This is recommended. TRUE: Approximate match. Before you use an approximate match, sort your search key in ascending order. Otherwise, you may likely get a wrong return value.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 3 && this.bareArgs.length !== 4) {\n throw new FormulaError('#N/A', 'Number of arguments for VLOOKUP is incorrect.');\n }\n if (this.bareArgs[0] instanceof Table) {\n this.bareArgs[0] = stripTable({ value: this.bareArgs[0] });\n }\n if (!(this.bareArgs[1] instanceof Table)) {\n throw new FormulaError('#REF!', '2nd argument must be range');\n }\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n this.bareArgs[3] = ensureBoolean(this.bareArgs[3], { alternative: true });\n }\n\n protected main(key: any, range: Table, index: number, isSorted: boolean) {\n const matrix = solveTable({ table: range });\n if (isSorted) {\n let last = -1;\n for (let y = 0; y <= range.getNumRows(); y++) {\n const v = matrix[y]?.[0];\n if (v == null) {\n continue;\n }\n if (v <= key) {\n last = y;\n } else {\n break;\n }\n }\n if (last !== -1) {\n return matrix[last]?.[index - 1];\n }\n } else {\n for (let y = 0; y <= range.getNumRows(); y++) {\n if (matrix[y]?.[0] === key) {\n return matrix[y]?.[index - 1];\n }\n }\n }\n throw new FormulaError('#N/A', `No values found for '${key}'.`);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean, ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\n\nexport class HlookupFunction extends BaseFunction {\n example = 'HLOOKUP(10003, A2:Z6, 2, FALSE)';\n helpText = [\n 'Searches horizontally for the specified key in the first row of the range and returns the value of the specified cell in the same column.',\n ];\n helpArgs = [\n { name: 'key', description: 'Search key.' },\n {\n name: 'range',\n description: 'A range for search',\n },\n {\n name: 'index',\n description: 'The index of the row in the range.',\n },\n {\n name: 'is_sorted',\n description:\n 'FALSE: Exact match. This is recommended. TRUE: Approximate match. Before you use an approximate match, sort your search key in ascending order. Otherwise, you may likely get a wrong return value.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 3 && this.bareArgs.length !== 4) {\n throw new FormulaError('#N/A', 'Number of arguments for HLOOKUP is incorrect.');\n }\n if (this.bareArgs[0] instanceof Table) {\n this.bareArgs[0] = stripTable({ value: this.bareArgs[0] });\n }\n if (!(this.bareArgs[1] instanceof Table)) {\n throw new FormulaError('#REF!', '2nd argument must be range');\n }\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n this.bareArgs[3] = ensureBoolean(this.bareArgs[3], { alternative: true });\n }\n\n protected main(key: any, range: Table, index: number, isSorted: boolean) {\n const matrix = solveTable({ table: range });\n if (isSorted) {\n let last = -1;\n for (let x = 0; x <= range.getNumCols(); x++) {\n const v = matrix[0]?.[x];\n if (v == null) {\n continue;\n }\n if (v <= key) {\n last = x;\n } else {\n break;\n }\n }\n if (last !== -1) {\n return matrix[index - 1]?.[last];\n }\n } else {\n for (let x = 0; x <= range.getNumCols(); x++) {\n if (matrix[0]?.[x] === key) {\n return matrix[index - 1]?.[x];\n }\n }\n }\n throw new FormulaError('#N/A', `No values found for '${key}'.`);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class IndexFunction extends BaseFunction {\n example = 'INDEX(A1:C10, 2, 3)';\n helpText = [\n 'Returns a trimmed table based on row and column indices.',\n 'If row or column is 0 or omitted, returns all rows or columns.',\n ];\n helpArgs = [\n { name: 'table', description: 'A range of cells.' },\n { name: 'y', description: 'The row number in the table (0 or omitted for all rows).', optional: true },\n { name: 'x', description: 'The column number in the table (0 or omitted for all columns).', optional: true },\n ];\n\n protected validate() {\n if (this.bareArgs.length < 1 || this.bareArgs.length > 3) {\n throw new FormulaError('#N/A', 'Number of arguments for INDEX is incorrect.');\n }\n\n if (!(this.bareArgs[0] instanceof Table)) {\n throw new FormulaError('#VALUE!', 'First argument must be a range.');\n }\n\n if (this.bareArgs.length >= 2) {\n this.bareArgs[1] = ensureNumber(this.bareArgs[1]);\n if (this.bareArgs[1] < 0) {\n throw new FormulaError('#VALUE!', 'Row number must be greater than or equal to 0.');\n }\n }\n\n if (this.bareArgs.length === 3) {\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n if (this.bareArgs[2] < 0) {\n throw new FormulaError('#VALUE!', 'Column number must be greater than or equal to 0.');\n }\n }\n }\n\n protected main(table: Table, y?: number, x?: number) {\n const area = table.getArea();\n if (y) {\n if (y < 0 || y > table.getNumRows(1)) {\n throw new FormulaError('#NUM!', `Row number ${y} is out of range.`);\n }\n area.top = area.bottom = area.top + y - 1;\n }\n if (x) {\n if (x < 0 || x > table.getNumCols(1)) {\n throw new FormulaError('#NUM!', `Column number ${x} is out of range.`);\n }\n area.left = area.right = area.left + x - 1;\n }\n return table.trim(area);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\nimport { stripTable } from '../../formula/solver';\n\nexport class MatchFunction extends BaseFunction {\n example = 'MATCH(\"apple\", A1:A10, 0)';\n helpText = [\n 'Searches for a value in a table and returns its position.',\n 'Returns the position of the matched value (1-based index).',\n ];\n helpArgs = [\n { name: 'search_key', description: 'The value to search for.' },\n { name: 'range', description: 'The range to search in.' },\n {\n name: 'search_type',\n description: '0 for exact match, 1 for less than or equal, -1 for greater than or equal.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length < 2 || this.bareArgs.length > 3) {\n throw new FormulaError('#N/A', 'Number of arguments for MATCH is incorrect.');\n }\n\n if (this.bareArgs[0] instanceof Table) {\n this.bareArgs[0] = stripTable({ value: this.bareArgs[0] });\n }\n\n if (!(this.bareArgs[1] instanceof Table)) {\n throw new FormulaError('#VALUE!', 'Second argument must be a range.');\n }\n\n if (this.bareArgs.length === 3) {\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n if (![-1, 0, 1].includes(this.bareArgs[2])) {\n throw new FormulaError('#VALUE!', 'Match type must be -1, 0, or 1.');\n }\n } else {\n this.bareArgs[2] = 1; // Default to 1 (less than or equal)\n }\n }\n\n protected main(searchKey: any, range: Table, searchType: number = 1) {\n const matrix = solveTable({ table: range });\n // Check if matrix is 1-dimensional (either 1 row or 1 column)\n const numRows = matrix.length;\n const numCols = matrix[0]?.length || 0;\n if (!((numRows === 1 && numCols >= 1) || (numCols === 1 && numRows >= 1))) {\n throw new FormulaError('#N/A', 'Range must be a single row or single column.');\n }\n const array = matrix.reduce((acc, row) => acc.concat(row), []);\n\n if (array.length === 0) {\n throw new FormulaError('#N/A', 'range is empty.');\n }\n\n switch (searchType) {\n case 0: // Exact match\n for (let i = 0; i < array.length; i++) {\n if (array[i] === searchKey) {\n return i + 1; // 1-based index\n }\n }\n throw new FormulaError('#N/A', 'Value not found in range.');\n\n case 1: // Less than or equal (assumes sorted ascending)\n for (let i = array.length - 1; i >= 0; i--) {\n if (array[i] <= searchKey) {\n return i + 1; // 1-based index\n }\n }\n throw new FormulaError('#N/A', 'No value less than or equal to lookup value.');\n\n case -1: // Greater than or equal (assumes sorted descending)\n let lastIdx = -1;\n for (let i = 0; i < array.length; i++) {\n if (Number(array[i]) >= Number(searchKey)) {\n lastIdx = i;\n }\n }\n if (lastIdx !== -1) {\n return lastIdx + 1; // 1-based index\n }\n throw new FormulaError('#N/A', 'No value greater than or equal to lookup value.');\n\n default:\n throw new FormulaError('#VALUE!', 'Invalid search type.');\n }\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class LogFunction extends BaseFunction {\n example = 'LOG(128, 2)';\n helpText = ['Returns the logarithm of a number whose base is the specified number.'];\n helpArgs = [\n {\n name: 'value',\n description: 'The value for the logarithm of the specified number as base.',\n },\n { name: 'base', description: 'An exponent to power the base.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for LOG is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] <= 0) {\n throw new FormulaError('NUM!', 'value must be greater than 0');\n }\n if (this.bareArgs[1] <= 1) {\n throw new FormulaError('NUM!', 'base must be greater than 1');\n }\n }\n\n protected main(value: number, base: number) {\n return Math.log2(value) / Math.log2(base);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class Log10Function extends BaseFunction {\n example = 'LOG10(100)';\n helpText = ['Returns the logarithm of 10'];\n helpArgs = [\n {\n name: 'value',\n description: 'The value for the logarithm of 10',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LOG10 is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] <= 0) {\n throw new FormulaError('NUM!', 'value must be greater than 0');\n }\n }\n\n protected main(value: number) {\n return Math.log10(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class LnFunction extends BaseFunction {\n example = 'LN(100)';\n helpText = ['Returns the logarithm of e'];\n helpArgs = [\n {\n name: 'value',\n description: 'The value for the logarithm of e',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] <= 0) {\n throw new FormulaError('NUM!', 'value must be greater than 0');\n }\n }\n\n protected main(value: number) {\n return Math.log(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AbsFunction extends BaseFunction {\n example = 'ABS(-2)';\n helpText = ['Returns the absolute value of a number'];\n helpArgs = [{ name: 'value', description: 'target number' }];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ABS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number) {\n return Math.abs(value);\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class ProductFunction extends BaseFunction {\n example = 'PRODUCT(A2:A100)';\n helpText = ['Returns the product of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: number[] = [];\n this.bareArgs.forEach((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n return values.reduce((a, b) => a * b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class RandFunction extends BaseFunction {\n example = 'RAND()';\n helpText = ['Returns a random number between 0 and 1.'];\n helpArgs = [];\n\n protected validate() {\n if (this.bareArgs.length !== 0) {\n throw new FormulaError('#N/A', 'Number of arguments for RAND is incorrect.');\n }\n }\n\n protected main() {\n return Math.random();\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class PiFunction extends BaseFunction {\n example = 'PI()';\n helpText = ['Returns the value of pi.'];\n helpArgs = [];\n\n protected validate() {\n if (this.bareArgs.length !== 0) {\n throw new FormulaError('#N/A', 'Number of arguments for PI is incorrect.');\n }\n }\n\n protected main() {\n return Math.PI;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class ExpFunction extends BaseFunction {\n example = 'EXP(2)';\n helpText = ['Returns the power of a number whose base is the Euler number e.'];\n helpArgs = [\n {\n name: 'exponent',\n description: 'It is an exponent of power with e as the base.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for EXP is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(exponent: number) {\n return Math.exp(exponent);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RadiansFunction extends BaseFunction {\n example = 'RADIANS(180)';\n helpText = ['Converts an angle from degrees to radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'The angle to convert from degrees to radians.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for RADIANS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return (angle / 180) * Math.PI;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class PowerFunction extends BaseFunction {\n example = 'POWER(4,0.5)';\n helpText = ['Returns a number multiplied by an exponent.'];\n helpArgs = [\n { name: 'base', description: 'A number to be multiplied by an exponent.' },\n { name: 'exponent', description: 'An exponent to power the base.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for POWER is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(base: number, exponent: number) {\n return Math.pow(base, exponent);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class SqrtFunction extends BaseFunction {\n example = 'SQRT(9)';\n helpText = ['Returns the positive square root of a positive number.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number for which the positive square root is to be found.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for SQRT is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] < 0) {\n throw new FormulaError('NUM!', 'First argument must be positive.');\n }\n }\n\n protected main(value: number) {\n return Math.sqrt(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RoundFunction extends BaseFunction {\n example = 'ROUND(99.44,1)';\n helpText = ['Round a number to the specified number of decimal places according to standard rules.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number to be rounded.',\n },\n {\n name: 'digit',\n description: 'The number of decimal places after rounding.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1 && this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ROUND is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number, digit = 0) {\n const multiplier = Math.pow(10, digit);\n return Math.round(value * multiplier) / multiplier;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RoundupFunction extends BaseFunction {\n example = 'ROUNDUP(99.44,1)';\n helpText = ['Round up a number to the specified number of decimal places according to standard rules.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number to be rounded up.',\n },\n {\n name: 'digit',\n description: 'The number of decimal places after rounding.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1 && this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ROUNDUP is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number, digit = 0) {\n const multiplier = Math.pow(10, digit);\n return Math.ceil(value * multiplier) / multiplier;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RounddownFunction extends BaseFunction {\n example = 'ROUNDDOWN(99.44,1)';\n helpText = ['Round down a number to the specified number of decimal places according to standard rules.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number to be rounded down.',\n },\n {\n name: 'digit',\n description: 'The number of decimal places after rounding.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1 && this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ROUNDDOWN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number, digit = 0) {\n const multiplier = Math.pow(10, digit);\n return Math.floor(value * multiplier) / multiplier;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class SinFunction extends BaseFunction {\n example = 'SIN(PI()/2)';\n helpText = ['Returns the sin of the angle specified in radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'An angle in radians, at which you want the sin.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for SIN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return Math.sin(angle);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class CosFunction extends BaseFunction {\n example = 'COS(PI()/2)';\n helpText = ['Returns the cos of the angle specified in radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'An angle in radians, at which you want the cos.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for COS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return Math.cos(angle);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class TanFunction extends BaseFunction {\n example = 'TAN(1)';\n helpText = ['Returns the tan of the angle specified in radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'An angle in radians, at which you want the tan.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for TAN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return Math.tan(angle);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AsinFunction extends BaseFunction {\n example = 'ASIN(0)';\n helpText = ['Returns the inverse sin of the value in radians.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A value for the inverse sin between -1 and 1.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ASIN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (-1 > this.bareArgs[0] || this.bareArgs[0] > 1) {\n throw new FormulaError('#NUM!', 'value must be between -1 and 1');\n }\n }\n\n protected main(value: number) {\n return Math.asin(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AcosFunction extends BaseFunction {\n example = 'ACOS(0)';\n helpText = ['Returns the inverse cos of the value in radians.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A value for the inverse cos between -1 and 1.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ACOS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (-1 > this.bareArgs[0] || this.bareArgs[0] > 1) {\n throw new FormulaError('#NUM!', 'value must be between -1 and 1');\n }\n }\n\n protected main(value: number) {\n return Math.acos(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AtanFunction extends BaseFunction {\n example = 'ATAN(1)';\n helpText = ['Returns the inverse tan of the value in radians.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A value for the inverse tan.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ATAN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number) {\n return Math.atan(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class Atan2Function extends BaseFunction {\n example = 'ATAN2(4,3)';\n helpText = [\n 'Returns the angle in radians between the x-axis and a line passing from the origin through a given coordinate point (x, y).',\n ];\n helpArgs = [\n {\n name: 'x',\n description: 'x of the point.',\n },\n {\n name: 'y',\n description: 'y of the point.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ATAN2 is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(x: number, y: number) {\n return Math.atan2(x, y);\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class CountaFunction extends BaseFunction {\n example = 'COUNTA(A2:A100,B2:B100,4,26)';\n helpText = ['Returns the number of values in the data set.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: any[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(...solveTable({ table: arg }).reduce((a, b) => a.concat(b)));\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: any[]) {\n return values.filter((v) => v != null && v !== '').length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AverageFunction extends BaseFunction {\n example = 'AVERAGE(A2:A100, 101)';\n helpText = ['Returns the average of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: number[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n if (spreaded.length === 0) {\n throw new FormulaError('#N/A', 'Number of arguments must be greater than 0.');\n }\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n return values.reduce((a, b) => a + b) / values.length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class MaxFunction extends BaseFunction {\n example = 'MAX(A2:A100, 101)';\n helpText = ['Returns the max in a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n throw new FormulaError('#N/A', 'Number of arguments must be greater than 0.');\n }\n const spreaded: number[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n if (values.length === 0) {\n return 0;\n }\n return Math.max(...values);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class MinFunction extends BaseFunction {\n example = 'MIN(A2:A100, 101)';\n helpText = ['Returns the min in a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n throw new FormulaError('#N/A', 'Number of arguments must be greater than 0.');\n }\n const spreaded: number[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n if (values.length === 0) {\n return 0;\n }\n return Math.min(...values);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class LenFunction extends BaseFunction {\n example = 'LEN(A2)';\n helpText = ['Returns the length of a string.'];\n helpArgs = [\n {\n name: 'text',\n description: 'A text to be returned the length.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LEN is incorrect.');\n }\n this.bareArgs = [ensureString(this.bareArgs[0])];\n }\n\n protected main(text: string) {\n return text.length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class LenbFunction extends BaseFunction {\n example = 'LENB(A2)';\n helpText = ['Returns the number of bytes in the length of the string.'];\n helpArgs = [\n {\n name: 'text',\n description: 'A text to be returned the length of the bytes.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LENB is incorrect.');\n }\n this.bareArgs = [ensureString(this.bareArgs[0])];\n }\n\n protected main(text: string) {\n return encodeURIComponent(text).replace(/%../g, 'x').length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class UminusFunction extends BaseFunction {\n example = 'UMINUS(4)';\n helpText = ['Returns a number with positive and negative values reversed.'];\n helpArgs = [{ name: 'value1', description: 'A number that will be subtracted.' }];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'A single numerical value is only required.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(v1: number) {\n return -v1;\n }\n}\n","import { Table } from '../../lib/table';\nimport { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class RowFunction extends BaseFunction {\n example = 'ROW(A9)';\n helpText = ['Returns the row number of a specified cell.'];\n helpArgs = [\n {\n name: 'cell_reference',\n description: 'The cell whose row number will be returned.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n this.bareArgs = [this.origin?.y ?? 1];\n } else if (this.bareArgs.length === 1) {\n const table = this.bareArgs[0] as Table;\n this.bareArgs = [table.top];\n } else {\n throw new FormulaError('#N/A', 'Number of arguments for ROW is incorrect.');\n }\n }\n\n protected main(top: number) {\n return top;\n }\n}\n","import { Table } from '../../lib/table';\nimport { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class ColFunction extends BaseFunction {\n example = 'COL(A9)';\n helpText = ['Returns the col number of a specified cell.'];\n helpArgs = [\n {\n name: 'cell_reference',\n description: 'The cell whose col number will be returned.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n this.bareArgs = [this.origin?.x ?? 1];\n } else if (this.bareArgs.length === 1) {\n const table = this.bareArgs[0] as Table;\n this.bareArgs = [table.left];\n } else {\n throw new FormulaError('#N/A', 'Number of arguments for COL is incorrect.');\n }\n }\n\n protected main(left: number) {\n return left;\n }\n}\n","import { AddFunction } from './functions/add';\nimport { MinusFunction } from './functions/minus';\nimport { MultiplyFunction } from './functions/multiply';\nimport { DivideFunction } from './functions/divide';\nimport { ModFunction } from './functions/mod';\nimport { SumFunction } from './functions/sum';\nimport { ConcatFunction } from './functions/concat';\nimport { ConcatenateFunction } from './functions/concatenate';\nimport { EqFunction } from './functions/eq';\nimport { NeFunction } from './functions/ne';\nimport { GtFunction } from './functions/gt';\nimport { GteFunction } from './functions/gte';\nimport { LtFunction } from './functions/lt';\nimport { LteFunction } from './functions/lte';\nimport { NowFunction } from './functions/now';\nimport { AndFunction } from './functions/and';\nimport { OrFunction } from './functions/or';\nimport { IfFunction } from './functions/if';\nimport { IfErrorFunction } from './functions/iferror';\nimport { NotFunction } from './functions/not';\nimport { CountFunction } from './functions/count';\nimport { CountifFunction } from './functions/countif';\nimport { SumifFunction } from './functions/sumif';\nimport { VlookupFunction } from './functions/vlookup';\nimport { HlookupFunction } from './functions/hlookup';\nimport { IndexFunction } from './functions/index';\nimport { MatchFunction } from './functions/match';\nimport { LogFunction } from './functions/log';\nimport { Log10Function } from './functions/log10';\nimport { LnFunction } from './functions/ln';\nimport { AbsFunction } from './functions/abs';\nimport { ProductFunction } from './functions/product';\nimport { RandFunction } from './functions/rand';\nimport { PiFunction } from './functions/pi';\nimport { ExpFunction } from './functions/exp';\nimport { RadiansFunction } from './functions/radians';\nimport { PowerFunction } from './functions/power';\nimport { SqrtFunction } from './functions/sqrt';\nimport { RoundFunction } from './functions/round';\nimport { RoundupFunction } from './functions/roundup';\nimport { RounddownFunction } from './functions/rounddown';\nimport { SinFunction } from './functions/sin';\nimport { CosFunction } from './functions/cos';\nimport { TanFunction } from './functions/tan';\nimport { AsinFunction } from './functions/asin';\nimport { AcosFunction } from './functions/acos';\nimport { AtanFunction } from './functions/atan';\nimport { Atan2Function } from './functions/atan2';\nimport { CountaFunction } from './functions/counta';\nimport { AverageFunction } from './functions/average';\nimport { MaxFunction } from './functions/max';\nimport { MinFunction } from './functions/min';\nimport { LenFunction } from './functions/len';\nimport { LenbFunction } from './functions/lenb';\nimport { UminusFunction } from './functions/uminus';\nimport { RowFunction } from './functions/row';\nimport { ColFunction } from './functions/col';\nimport type { FunctionMapping } from './functions/__base';\n\nexport const functions: FunctionMapping = {\n abs: AbsFunction,\n add: AddFunction,\n divide: DivideFunction,\n mod: ModFunction,\n minus: MinusFunction,\n uminus: UminusFunction,\n multiply: MultiplyFunction,\n pow: PowerFunction,\n power: PowerFunction,\n sqrt: SqrtFunction,\n sum: SumFunction,\n sumif: SumifFunction,\n max: MaxFunction,\n min: MinFunction,\n average: AverageFunction,\n count: CountFunction,\n counta: CountaFunction,\n countif: CountifFunction,\n product: ProductFunction,\n concat: ConcatFunction,\n concatenate: ConcatenateFunction,\n eq: EqFunction,\n ne: NeFunction,\n gt: GtFunction,\n gte: GteFunction,\n lt: LtFunction,\n lte: LteFunction,\n and: AndFunction,\n or: OrFunction,\n round: RoundFunction,\n rounddown: RounddownFunction,\n roundup: RoundupFunction,\n if: IfFunction,\n // @ts-expect-error iferror does not extends BaseFunction\n iferror: IfErrorFunction,\n not: NotFunction,\n vlookup: VlookupFunction,\n hlookup: HlookupFunction,\n index: IndexFunction,\n match: MatchFunction,\n row: RowFunction,\n col: ColFunction,\n column: ColFunction,\n now: NowFunction,\n rand: RandFunction,\n log: LogFunction,\n log10: Log10Function,\n ln: LnFunction,\n exp: ExpFunction,\n pi: PiFunction,\n radians: RadiansFunction,\n sin: SinFunction,\n cos: CosFunction,\n tan: TanFunction,\n asin: AsinFunction,\n acos: AcosFunction,\n atan: AtanFunction,\n atan2: Atan2Function,\n len: LenFunction,\n lenb: LenbFunction,\n};\n","import { DEFAULT_HISTORY_LIMIT, RESET_ZONE } from '../constants';\n\nimport type {\n HistoryType,\n RefPaletteType,\n SheetIdsByName,\n ContextsBySheetId,\n ZoneType,\n CellsByIdType,\n Id,\n StoreDispatchType,\n CellType,\n System,\n FeedbackType,\n EditorEvent,\n CursorStateType,\n} from '../types';\nimport type { UserTable } from './table';\nimport { useEffect, useState } from 'react';\nimport { updateTable } from '../store/actions';\nimport type { FunctionMapping } from '../formula/functions/__base';\nimport { functions as functionsDefault } from '../formula/mapping';\nimport { PolicyType } from '../policy/core';\nimport { RendererType } from '../renderers/core';\nimport { ParserType } from '../parsers/core';\nimport { Table } from './table';\n\nexport type WireProps = {\n historyLimit?: number;\n additionalFunctions?: FunctionMapping;\n renderers?: { [rendererName: string]: RendererType | null };\n parsers?: { [parserName: string]: ParserType | null };\n labelers?: { [labelerName: string]: ((n: number) => string) | null };\n policies?: { [policyName: string]: PolicyType | null };\n onSave?: FeedbackType;\n onChange?: FeedbackType;\n onEdit?: (args: { table: UserTable }) => void;\n onRemoveRows?: (args: { table: UserTable; ys: number[] }) => void;\n onRemoveCols?: (args: { table: UserTable; xs: number[] }) => void;\n onInsertRows?: (args: { table: UserTable; y: number; numRows: number }) => void;\n onInsertCols?: (args: { table: UserTable; x: number; numCols: number }) => void;\n onSelect?: FeedbackType;\n onKeyUp?: (args: { e: EditorEvent; points: CursorStateType }) => void;\n onInit?: (args: { table: UserTable }) => void;\n};\n\nexport type HubProps = WireProps;\n\nexport class Wire {\n sheetHead: number = 0;\n cellHead: number = 0;\n data: CellsByIdType = {};\n sheetIdsByName: SheetIdsByName = {};\n contextsBySheetId: ContextsBySheetId = {};\n choosingSheetId: number = 0;\n choosingAddress: string = '';\n editingSheetId: number = 0;\n editingAddress: string = '';\n paletteBySheetName: { [sheetName: string]: RefPaletteType } = {};\n lastFocused: HTMLTextAreaElement | null = null;\n solvedCaches: Map<Id, any> = new Map();\n copyingSheetId: number = 0;\n copyingZone: ZoneType = RESET_ZONE;\n cutting: boolean = false;\n histories: HistoryType[] = [];\n historyIndex: number = -1;\n historyLimit: number = DEFAULT_HISTORY_LIMIT;\n lastHistory?: HistoryType;\n currentHistory?: HistoryType;\n ready = false;\n functions: FunctionMapping = {};\n renderers: { [rendererName: string]: RendererType | null } = {};\n parsers: { [parserName: string]: ParserType | null } = {};\n labelers: { [labelerName: string]: ((n: number) => string) | null } = {};\n policies: { [policyName: string]: PolicyType | null } = {};\n onSave?: FeedbackType;\n onChange?: FeedbackType;\n onEdit?: (args: { table: UserTable }) => void;\n onRemoveRows?: (args: { table: UserTable; ys: number[] }) => void;\n onRemoveCols?: (args: { table: UserTable; xs: number[] }) => void;\n onInsertRows?: (args: { table: UserTable; y: number; numRows: number }) => void;\n onInsertCols?: (args: { table: UserTable; x: number; numCols: number }) => void;\n onSelect?: FeedbackType;\n onKeyUp?: (args: { e: EditorEvent; points: CursorStateType }) => void;\n onInit?: (args: { table: UserTable }) => void;\n\n transmit: (newHub?: TransmitProps) => void = (newHub?: TransmitProps) => {\n // This method will be overridden by useHub\n };\n\n public identifyFormula() {\n if (this.ready || Object.keys(this.contextsBySheetId).length === 0) {\n return;\n }\n const keys = Object.keys(this.contextsBySheetId);\n const tobe: StoreDispatchType[] = [];\n for (let i = 0; i < keys.length; i++) {\n const sheetId = keys[i];\n const storeDispatch = this.contextsBySheetId[sheetId];\n const table = storeDispatch.store.tableReactive.current;\n if (!table || table.status === 0) {\n return;\n }\n tobe.push(storeDispatch);\n }\n for (let i = 0; i < tobe.length; i++) {\n const { store, dispatch } = tobe[i];\n const table = store.tableReactive.current;\n if (!table) {\n continue;\n }\n table.identifyFormula();\n dispatch(updateTable(table));\n }\n this.ready = true;\n }\n\n public getSystem(id: Id, table: Table): System {\n const cell = this.data[id];\n if (cell?.system) {\n return cell.system;\n }\n return {\n id,\n sheetId: table.sheetId,\n changedAt: new Date(),\n dependents: new Set(),\n };\n }\n\n constructor({\n historyLimit,\n additionalFunctions,\n renderers = {},\n parsers = {},\n labelers = {},\n policies = {},\n onSave,\n onChange,\n onEdit,\n onRemoveRows,\n onRemoveCols,\n onInsertRows,\n onInsertCols,\n onSelect,\n onKeyUp,\n onInit,\n }: WireProps = {}) {\n if (historyLimit != null) {\n this.historyLimit = historyLimit;\n }\n this.functions = {\n ...functionsDefault,\n ...additionalFunctions,\n };\n this.renderers = renderers;\n this.parsers = parsers;\n this.labelers = labelers;\n this.policies = policies;\n this.onSave = onSave;\n this.onChange = onChange;\n this.onEdit = onEdit;\n this.onRemoveRows = onRemoveRows;\n this.onRemoveCols = onRemoveCols;\n this.onInsertRows = onInsertRows;\n this.onInsertCols = onInsertCols;\n this.onSelect = onSelect;\n this.onKeyUp = onKeyUp;\n this.onInit = onInit;\n }\n}\n\nexport type TransmitProps = Partial<Wire>;\n\nexport const createWire = (props: WireProps = {}) => {\n return new Wire(props);\n};\n\nexport type HubType = {\n wire: Wire;\n};\n\nexport const createHub = (props: WireProps = {}): HubType => {\n return { wire: createWire(props) };\n};\n\nexport const useHub = (props: WireProps = {}) => {\n const [hub, setHub] = useState<HubType>(() => createHub(props));\n const { wire } = hub;\n wire.transmit = (patch?: TransmitProps) => {\n Object.assign(wire, patch);\n if (!wire.ready) {\n return;\n }\n requestAnimationFrame(() => setHub({ wire }));\n };\n useEffect(() => {\n Object.assign(wire, props);\n }, [props]);\n return hub;\n};\n","import type { UserTable } from '../lib/table';\nimport type { CellPatchType, CellType, OperationType, PointType } from '../types';\n\nexport type PolicyOption = {\n value: any;\n label?: any;\n keywords?: string[];\n};\n\nexport type RestrictProps = {\n table: UserTable;\n point: PointType;\n original?: CellType;\n patch?: CellType;\n operation: OperationType;\n};\n\nexport type OnClipProps = {\n table: UserTable;\n point: PointType;\n};\n\nexport type GetDefaultProps = {\n table: UserTable;\n point: PointType;\n value: any;\n};\n\nexport type PolicyMixinType = {\n getDefault?: (props: GetDefaultProps) => CellType | undefined;\n select?: (props: RestrictProps) => CellType | undefined;\n validate?: (props: RestrictProps) => CellType | undefined;\n onClip?: (props: OnClipProps) => string;\n getOptions?: () => PolicyOption[];\n};\n\ntype PolicyProps = {\n mixins?: PolicyMixinType[];\n};\n\nexport class Policy implements PolicyMixinType {\n constructor(props?: PolicyProps) {\n this.applyMixins(props?.mixins);\n }\n\n private applyMixins(mixins?: PolicyMixinType[]) {\n if (mixins == null) {\n return;\n }\n for (const mixin of mixins) {\n for (const key in mixin) {\n (this as any)[key] = (mixin as any)[key];\n }\n }\n }\n\n public getDefault(props: GetDefaultProps): any {\n return { value: null };\n }\n\n public select(props: RestrictProps) {\n const { patch, table, point } = props;\n const options = this.getOptions();\n const index = options.findIndex((option) => option.value === patch?.value);\n if (options.length > 0 && index === -1) {\n return { ...patch, ...this.getDefault({ table, point, value: patch?.value }) };\n }\n return patch;\n }\n\n public validate(props: RestrictProps): CellPatchType | undefined {\n const { patch } = props;\n return patch;\n }\n\n public restrict(props: RestrictProps): CellPatchType | undefined {\n const patch = this.select(props);\n return this.validate({ ...props, patch });\n }\n\n public onClip(props: OnClipProps): string {\n const { point, table } = props;\n return table.stringify({ point }) ?? '';\n }\n\n public getOptions(): PolicyOption[] {\n return [];\n }\n}\n\nexport type PolicyType = Policy;\nexport const defaultPolicy = new Policy();\n","import { identifyFormula } from '../formula/evaluator';\nimport { CellsByIdType, Id } from '../types';\nimport { Table } from './table';\n\nexport class ReferencePreserver {\n public map: { [id: Id]: Id } = {};\n private table: Table;\n private dependentIds: Set<Id> = new Set<Id>();\n\n constructor(table: Table) {\n this.table = table;\n }\n\n addTheDependents(...ids: Id[]) {\n ids.forEach((id) => {\n const cell = this.table.wire.data[id];\n cell?.system?.dependents?.forEach((did) => {\n this.dependentIds.add(did);\n });\n });\n }\n\n resolveDependents(operation?: 'move' | 'removeRows' | 'removeCols'): CellsByIdType {\n this.table.clearAddressCaches();\n const diffBefore: CellsByIdType = {};\n this.dependentIds.forEach((id) => {\n const dep = this.table.wire.data[id];\n if (dep == null) {\n return;\n }\n diffBefore[id] = { ...dep };\n dep.value = identifyFormula(dep.value, {\n dependency: id,\n table: this.table,\n idMap: this.map,\n operation,\n });\n });\n\n return diffBefore;\n }\n}\n","import { defaultParser } from '../parsers/core';\nimport { defaultRenderer, RendererCallProps } from '../renderers/core';\nimport {\n Id,\n Ids,\n IdMatrix,\n AreaType,\n CellsByIdType,\n CellsByAddressType,\n PointType,\n Address,\n CellFilter,\n MatrixType,\n CellType,\n HistoryType,\n StorePatchType,\n ShapeType,\n OperatorType,\n OperationType,\n RawCellType,\n ExtraPointType,\n StoreType,\n RefEvaluation,\n} from '../types';\nimport {\n among,\n areaShape,\n createMatrix,\n expandRange,\n getMaxSizesFromCells,\n invertObject,\n matrixShape,\n putMatrix,\n} from './structs';\nimport { a2p, x2c, p2a, y2r, grantAddressAbsolute } from './converters';\nimport { FunctionMapping } from '../formula/functions/__base';\nimport { identifyFormula, Lexer, splitRef, stripSheetName } from '../formula/evaluator';\nimport { solveFormula, stripTable } from '../formula/solver';\n\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, HEADER_HEIGHT, HEADER_WIDTH, DEFAULT_HISTORY_LIMIT } from '../constants';\nimport { shouldTracking } from '../store/helpers';\nimport { updateTable } from '../store/actions';\nimport * as operation from './operation';\nimport { Wire, createWire } from './hub';\nimport { safeQueueMicrotask } from './time';\nimport { defaultPolicy, PolicyType } from '../policy/core';\nimport { escapeSheetName, getSheetPrefix } from './sheet';\nimport { ReferencePreserver } from './reference';\n\ntype Props = {\n minNumRows?: number;\n maxNumRows?: number;\n minNumCols?: number;\n maxNumCols?: number;\n functions?: FunctionMapping;\n sheetName?: string;\n hub?: Wire;\n};\n\nconst noFilter: CellFilter = () => true;\n\ntype GetProps = {\n // do not use 'SYSTEM', it is reserved for internal use.\n refEvaluation?: RefEvaluation;\n raise?: boolean;\n filter?: CellFilter;\n};\n\ntype MoveProps = {\n srcTable?: UserTable;\n src: AreaType;\n dst: AreaType;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n historicize?: boolean;\n};\n\ntype GetFieldProps = GetProps & {\n field?: keyof CellType;\n};\n\ntype GetPropsWithArea = GetProps & {\n area?: AreaType;\n};\n\ntype GetFieldPropsWithArea = GetFieldProps & {\n area?: AreaType;\n};\n\nexport interface UserTable {\n changedAt: Date;\n lastChangedAt?: Date;\n top: number;\n left: number;\n bottom: number;\n right: number;\n minNumRows: number;\n maxNumRows: number;\n minNumCols: number;\n maxNumCols: number;\n headerWidth: number;\n headerHeight: number;\n sheetName: string;\n\n /**\n * Returns the raw table object, which is used for internal operations.\n * This is not intended for public use and may change in future versions.\n */\n __raw__: Table;\n\n getRectSize(area: AreaType): ShapeType;\n getCellByPoint(point: PointType, refEvaluation?: RefEvaluation, raise?: boolean): CellType | undefined;\n getCellByAddress(address: Address, refEvaluation?: RefEvaluation, raise?: boolean): CellType | undefined;\n getNumRows(base?: number): number;\n getNumCols(base?: number): number;\n getFieldMatrix(args?: GetFieldPropsWithArea): any[][];\n getFieldObject(args?: GetFieldProps): { [address: Address]: any };\n getFieldRows(args?: GetFieldProps): { [address: Address]: any }[];\n getFieldCols(args?: GetFieldProps): { [address: Address]: any }[];\n getMatrix(args?: GetPropsWithArea): (CellType | null)[][];\n getObject(args?: GetProps): CellsByAddressType;\n getRows(args?: GetProps): CellsByAddressType[];\n getCols(args?: GetProps): CellsByAddressType[];\n getHistories(): HistoryType[];\n move(args: MoveProps): UserTable;\n copy(args: MoveProps & { onlyValue?: boolean }): UserTable;\n update(args: {\n diff: CellsByAddressType;\n historicize?: boolean;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StorePatchType;\n }): UserTable;\n writeMatrix(args: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n reflection?: StorePatchType;\n }): UserTable;\n write(args: { point: PointType; value: string; updateChangedAt?: boolean; reflection?: StorePatchType }): UserTable;\n insertRows(args: {\n y: number;\n numRows: number;\n baseY: number;\n diff?: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StorePatchType;\n }): UserTable;\n removeRows(args: { y: number; numRows: number; reflection?: StorePatchType }): UserTable;\n insertCols(args: {\n x: number;\n numCols: number;\n baseX: number;\n diff?: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StorePatchType;\n }): UserTable;\n removeCols(args: { x: number; numCols: number; reflection?: StorePatchType }): UserTable;\n undo(): {\n history: HistoryType | null;\n };\n redo(): {\n history: HistoryType | null;\n };\n getHistories(): HistoryType[];\n getHistoryIndex(): number;\n getHistorySize(): number;\n setHeaderHeight(height: number, historicize?: boolean): UserTable;\n setHeaderWidth(width: number, historicize?: boolean): UserTable;\n\n stringify(props: { point: PointType; cell?: CellType; refEvaluation?: RefEvaluation }): string;\n}\n\nexport class Table implements UserTable {\n public changedAt: Date;\n public lastChangedAt?: Date;\n public minNumRows: number;\n public maxNumRows: number;\n public minNumCols: number;\n public maxNumCols: number;\n public sheetId: number = 0;\n public sheetName: string = '';\n public prevSheetName: string = '';\n public status: 0 | 1 | 2 = 0; // 0: not initialized, 1: initialized, 2: formula absoluted\n public wire: Wire;\n public idsToBeIdentified: Id[] = [];\n public totalWidth = 0;\n public totalHeight = 0;\n\n private version = 0;\n private idMatrix: IdMatrix;\n private area: AreaType = { top: 0, left: 0, bottom: 0, right: 0 };\n private addressCaches: Map<Id, Address> = new Map();\n\n constructor({\n minNumRows = 1,\n maxNumRows = -1,\n minNumCols = 1,\n maxNumCols = -1,\n sheetName,\n hub = createWire({}),\n }: Props) {\n this.idMatrix = [];\n this.changedAt = new Date();\n this.minNumRows = minNumRows || 0;\n this.maxNumRows = maxNumRows || 0;\n this.minNumCols = minNumCols || 0;\n this.maxNumCols = maxNumCols || 0;\n this.sheetName = sheetName || '';\n this.wire = hub;\n }\n\n get headerHeight() {\n return this.getCellByPoint({ y: 0, x: 0 }, 'SYSTEM')?.height || HEADER_HEIGHT;\n }\n\n setHeaderHeight(height: number, historicize = true) {\n return this.update({\n diff: { 0: { height } },\n partial: true,\n historicize,\n });\n }\n\n get headerWidth() {\n return this.getCellByPoint({ y: 0, x: 0 }, 'SYSTEM')?.width || HEADER_WIDTH;\n }\n\n setHeaderWidth(width: number, historicize = true) {\n return this.update({\n diff: { 0: { width } },\n partial: true,\n historicize,\n });\n }\n\n get isInitialized() {\n return this.status === 2;\n }\n\n get functions() {\n return this.wire.functions;\n }\n\n get parsers() {\n return this.wire.parsers;\n }\n\n get renderers() {\n return this.wire.renderers;\n }\n\n get labelers() {\n return this.wire.labelers;\n }\n\n get policies() {\n return this.wire.policies;\n }\n\n public identifyFormula() {\n this.idsToBeIdentified.forEach((id) => {\n const cell = this.wire.data[id];\n if (cell?.system?.sheetId == null) {\n return;\n }\n cell.value = identifyFormula(cell?.value, {\n table: this,\n dependency: id,\n });\n });\n this.idsToBeIdentified = [];\n this.status = 2;\n }\n\n public getSheetId() {\n return this.sheetId;\n }\n\n public getTableBySheetName(sheetName: string) {\n const sheetId = this.wire.sheetIdsByName[sheetName];\n return this.getTableBySheetId(sheetId);\n }\n public getTableBySheetId(sheetId: number) {\n return this.wire.contextsBySheetId[sheetId]?.store?.tableReactive?.current;\n }\n\n public initialize(cells: CellsByAddressType) {\n if (this.status > 1) {\n return;\n }\n if (cells[0] == null) {\n cells[0] = { width: HEADER_WIDTH, height: HEADER_HEIGHT };\n }\n const auto = getMaxSizesFromCells(cells);\n const changedAt = new Date();\n this.area = {\n top: 1,\n left: 1,\n bottom: auto.numRows,\n right: auto.numCols,\n };\n\n // make idMatrix beforehand\n for (let y = 0; y < auto.numRows + 1; y++) {\n const ids: Ids = [];\n this.idMatrix.push(ids);\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.generateId();\n ids.push(id);\n const address = p2a({ y, x });\n this.addressCaches.set(id, address);\n }\n }\n Object.keys(cells).forEach((address) => {\n const range = expandRange(address);\n const data = cells[address];\n range.forEach((address) => {\n const origin = cells[address];\n cells[address] = {\n ...origin,\n ...data,\n style: {\n ...origin?.style,\n ...data?.style,\n },\n prevention: (origin?.prevention || 0) | (data?.prevention || 0),\n };\n });\n });\n\n const common = cells?.['default'];\n for (let y = 0; y < auto.numRows + 1; y++) {\n const rowId = y2r(y);\n const rowDefault = cells?.[rowId];\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.getId({ y, x });\n const address = p2a({ y, x });\n const colId = x2c(x);\n const colDefault = cells?.[colId];\n const cell = cells?.[address];\n const stacked = {\n ...common,\n ...rowDefault,\n ...colDefault,\n ...cell,\n style: {\n ...common?.style,\n ...rowDefault?.style,\n ...colDefault?.style,\n ...cell?.style,\n },\n prevention:\n (common?.prevention || 0) |\n (rowDefault?.prevention || 0) |\n (colDefault?.prevention || 0) |\n (cell?.prevention || 0),\n } as CellType;\n\n if (stacked?.value?.startsWith?.('=')) {\n this.idsToBeIdentified.push(id);\n }\n if (y === 0) {\n if (stacked.width == null) {\n stacked.width = DEFAULT_WIDTH;\n }\n } else if (x === 0) {\n if (stacked.height == null) {\n stacked.height = DEFAULT_HEIGHT;\n }\n } else {\n delete stacked.height;\n delete stacked.width;\n delete stacked.labeler;\n }\n stacked.system = { id, changedAt, dependents: new Set(), sheetId: this.sheetId };\n this.wire.data[id] = stacked;\n }\n }\n this.status = 1; // initialized\n this.wire.sheetIdsByName[this.sheetName] = this.sheetId;\n }\n\n public incrementVersion() {\n this.version++;\n if (this.version >= Number.MAX_SAFE_INTEGER) {\n this.version = 1;\n }\n }\n\n private generateId() {\n return (this.wire.cellHead++).toString(36);\n }\n\n public getRectSize({ top, left, bottom, right }: AreaType) {\n // Use System.offsetLeft / System.offsetTop stored on header cells for O(1) lookup.\n // offsetLeft on (y=0, x) = absolute left of column x\n // offsetTop on (y, x=0) = absolute top of row y\n const l = left || 1;\n const t = top || 1;\n\n const colRightCell = this.getCellByPoint({ y: 0, x: right }, 'SYSTEM');\n const colLeftCell = this.getCellByPoint({ y: 0, x: l }, 'SYSTEM');\n const rowBottomCell = this.getCellByPoint({ y: bottom, x: 0 }, 'SYSTEM');\n const rowTopCell = this.getCellByPoint({ y: t, x: 0 }, 'SYSTEM');\n\n const rw = colRightCell?.system?.offsetLeft ?? 0;\n const lw = colLeftCell?.system?.offsetLeft ?? 0;\n const rh = rowBottomCell?.system?.offsetTop ?? 0;\n const th = rowTopCell?.system?.offsetTop ?? 0;\n\n const width = Math.max(0, rw - lw);\n const height = Math.max(0, rh - th);\n return { width, height };\n }\n\n public setTotalSize() {\n const numCols = this.getNumCols();\n const numRows = this.getNumRows();\n const headerW = this.headerWidth;\n const headerH = this.headerHeight;\n\n // Write offsetLeft into column-header cells (y=0, x=1..numCols)\n let accW = 0;\n for (let x = 1; x <= numCols; x++) {\n const cell = this.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const w = cell?.width || DEFAULT_WIDTH;\n if (cell?.system) {\n cell.system.offsetLeft = headerW + accW;\n }\n accW += w;\n }\n this.totalWidth = headerW + accW;\n\n // Write offsetTop into row-header cells (y=1..numRows, x=0)\n let accH = 0;\n for (let y = 1; y <= numRows; y++) {\n const cell = this.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const h = cell?.height || DEFAULT_HEIGHT;\n if (cell?.system) {\n cell.system.offsetTop = headerH + accH;\n }\n accH += h;\n }\n this.totalHeight = headerH + accH;\n }\n\n public refresh(relocate = false, resize = false): Table {\n this.incrementVersion();\n this.lastChangedAt = this.changedAt;\n this.changedAt = new Date();\n\n this.clearSolvedCaches();\n\n if (relocate) {\n // force reset\n this.addressCaches.clear();\n }\n if (resize) {\n this.setTotalSize();\n }\n return this;\n }\n\n public clone(relocate = false): Table {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n return copied.refresh(relocate);\n }\n\n public getPointById(\n id: Id,\n slideY = 0,\n slideX = 0,\n ): PointType & {\n absCol: boolean;\n absRow: boolean;\n } {\n const absCol = id.startsWith('$');\n if (absCol) {\n id = id.slice(1);\n slideX = 0;\n }\n const absRow = id.endsWith('$');\n if (absRow) {\n id = id.slice(0, -1);\n slideY = 0;\n }\n const cache = this.addressCaches.get(id);\n if (cache) {\n const p = a2p(cache);\n return { y: p.y + slideY, x: p.x + slideX, absCol, absRow };\n }\n\n for (let y = 0; y < this.idMatrix.length; y++) {\n const ids = this.idMatrix[y];\n for (let x = 0; x < ids.length; x++) {\n const existing = ids[x];\n const address = p2a({ y, x });\n this.addressCaches.set(existing, address);\n if (existing === id) {\n return {\n y: y + slideY,\n x: x + slideX,\n absCol,\n absRow,\n };\n }\n }\n }\n return { y: -1, x: -1, absCol, absRow };\n }\n\n public getAddressById(id: Id, slideY = 0, slideX = 0): string | undefined {\n const { y, x, absCol, absRow } = this.getPointById(id, slideY, slideX);\n return grantAddressAbsolute(p2a({ y, x }), absCol, absRow);\n }\n\n public getAddressesByIds(ids: CellsByIdType) {\n const addresses: CellsByAddressType = {};\n Object.keys(ids).forEach((id) => {\n const cell = ids[id];\n const address = this.getAddressById(id);\n if (cell && address) {\n addresses[address] = cell;\n }\n });\n return addresses;\n }\n\n public clearAddressCaches() {\n this.addressCaches.clear();\n }\n\n public getId(point: PointType) {\n const { y, x } = point;\n return this.idMatrix[y]?.[x];\n }\n\n public getIdFormula(point: ExtraPointType): { id: Id | null; formula: string | null } {\n const { y, x, absX = false, absY = false } = point;\n const id = this.getId({ y, x });\n if (id == null) {\n return { id: null, formula: null };\n }\n return {\n id,\n formula: `${absX ? '$' : ''}#${id}${absY ? '$' : ''}`,\n };\n }\n\n public getCellByPoint(point: PointType, refEvaluation: RefEvaluation = 'COMPLETE', raise = false) {\n const { y, x } = point;\n if (y === -1 || x === -1) {\n return undefined;\n }\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n return undefined;\n }\n const cell = this.wire.data[id];\n if (cell == null) {\n return undefined;\n }\n const value = solveFormula({\n value: cell.value,\n table: this,\n raise,\n refEvaluation,\n origin: point,\n });\n return { ...cell, value } as CellType;\n }\n\n public getCellByAddress(address: Address, refEvaluation: RefEvaluation = 'COMPLETE', raise = false) {\n const point = a2p(address);\n return this.getCellByPoint(point, refEvaluation, raise);\n }\n\n public getById(id: Id) {\n return this.wire.data[id];\n }\n\n public getNumRows(base = 1) {\n const { top, bottom } = this.area;\n return base + bottom - top;\n }\n\n public getNumCols(base = 1) {\n const { left, right } = this.area;\n return base + right - left;\n }\n\n public get top() {\n return this.area.top;\n }\n public get left() {\n return this.area.left;\n }\n public get bottom() {\n return this.area.bottom;\n }\n public get right() {\n return this.area.right;\n }\n\n getFullRef(ref: Address) {\n if (this.sheetName) {\n return `#${this.sheetName}!${ref}`;\n }\n return ref;\n }\n\n public getFieldMatrix({\n area,\n field = 'value',\n refEvaluation = 'COMPLETE',\n raise = false,\n filter = noFilter,\n }: GetFieldPropsWithArea = {}) {\n const { top, left, bottom, right } = area ?? this.area;\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n matrix[y - top][x - left] = cell[field];\n }\n }\n }\n return matrix;\n }\n\n public getFieldObject({\n area,\n field = 'value',\n refEvaluation = 'COMPLETE',\n raise = false,\n filter = noFilter,\n }: GetFieldPropsWithArea = {}) {\n const result: { [Address: Address]: any } = {};\n const { top, left, bottom, right } = area ?? this.area;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n result[p2a({ y, x })] = cell[field];\n }\n }\n }\n return result;\n }\n\n public getFieldRows({\n field = 'value',\n refEvaluation = 'COMPLETE',\n raise = false,\n filter = noFilter,\n }: GetFieldProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n row[x2c(x)] = cell[field];\n }\n }\n }\n return result;\n }\n\n public getFieldCols({\n field = 'value',\n refEvaluation = 'COMPLETE',\n raise = false,\n filter = noFilter,\n }: GetFieldProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n col[y2r(y)] = cell[field];\n }\n }\n }\n return result;\n }\n\n public getMatrix({\n area,\n refEvaluation = 'SYSTEM',\n raise = false,\n filter = noFilter,\n }: GetPropsWithArea = {}): (CellType | null)[][] {\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n matrix[y - top][x - left] = cell;\n }\n }\n }\n return matrix;\n }\n public getObject({ refEvaluation = 'SYSTEM', area, raise = false, filter = noFilter }: GetPropsWithArea = {}) {\n const result: CellsByAddressType = {};\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y, x }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n result[p2a({ y, x })] = cell;\n }\n }\n }\n return result;\n }\n public getRows({ refEvaluation = 'COMPLETE', raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getCellByPoint({ y: y - top, x: x - left }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n row[x2c(x)] = cell;\n }\n }\n }\n return result;\n }\n public getCols({ refEvaluation = 'COMPLETE', raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getCellByPoint({ y: y - top, x: x - left }, refEvaluation, raise) ?? {};\n if (filter(cell)) {\n col[y2r(y)] = cell;\n }\n }\n }\n return result;\n }\n\n private pushHistory(history: HistoryType) {\n const hub = this.wire;\n const strayedHistories = hub.histories.splice(hub.historyIndex + 1, hub.histories.length);\n strayedHistories.forEach(this.cleanStrayed.bind(this));\n hub.histories.push(history);\n hub.lastHistory = hub.currentHistory = history;\n if (hub.histories.length > hub.historyLimit) {\n const kickedOut = hub.histories.splice(0, 1)[0];\n this.cleanObsolete(kickedOut);\n } else {\n hub.historyIndex++;\n }\n }\n\n private cleanObsolete(history: HistoryType) {\n if (history.operation === 'REMOVE_ROWS' || history.operation === 'REMOVE_COLS') {\n history.deleted.forEach((ids) => {\n ids.forEach((id) => {\n delete this.wire.data[id];\n });\n });\n }\n if (history.operation === 'MOVE') {\n Object.keys(history.lostRows).forEach((address) => {\n const idMatrix = history.lostRows[address];\n idMatrix.map((ids) =>\n ids.forEach((id) => {\n if (id != null) {\n delete this.wire.data[id];\n }\n }),\n );\n });\n }\n }\n\n private cleanStrayed(history: HistoryType) {\n if (history.operation === 'INSERT_ROWS' || history.operation === 'INSERT_COLS') {\n history.idMatrix.forEach((ids) => {\n ids.forEach((id) => {\n delete this.wire.data[id];\n });\n });\n }\n }\n\n private getNewIdMatrix(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n ids.push(this.generateId());\n }\n }\n return matrix;\n }\n\n private getIdMatrixFromArea(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n continue;\n }\n ids.push(id);\n }\n }\n return matrix;\n }\n\n private setChangedAt(cell?: CellType, changedAt?: Date) {\n if (cell?.system == null) {\n return null;\n }\n cell.system!.changedAt = changedAt ?? new Date();\n return cell;\n }\n\n private getUpdatedArea(diff: CellsByAddressType): AreaType {\n let minY = Infinity;\n let minX = Infinity;\n let maxY = -Infinity;\n let maxX = -Infinity;\n\n Object.keys(diff).forEach((address) => {\n const point = a2p(address);\n minY = Math.min(minY, point.y);\n minX = Math.min(minX, point.x);\n maxY = Math.max(maxY, point.y);\n maxX = Math.max(maxX, point.x);\n });\n\n return {\n top: minY,\n left: minX,\n bottom: maxY,\n right: maxX,\n };\n }\n\n private copyCellLayout(cell: CellType | undefined) {\n if (cell == null) {\n return undefined;\n }\n const newCell: CellType = {};\n if (cell.style != null) {\n newCell.style = cell.style;\n }\n if (cell.justifyContent != null) {\n newCell.justifyContent = cell.justifyContent;\n }\n if (cell.alignItems != null) {\n newCell.alignItems = cell.alignItems;\n }\n if (cell.renderer != null) {\n newCell.renderer = cell.renderer;\n }\n if (cell.parser != null) {\n newCell.parser = cell.parser;\n }\n if (cell.width != null) {\n newCell.width = cell.width;\n }\n if (cell.height != null) {\n newCell.height = cell.height;\n }\n if (cell.labeler != null) {\n newCell.labeler = cell.labeler;\n }\n return newCell;\n }\n\n public move({\n srcTable = this,\n src,\n dst,\n historicize = true,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: MoveProps) {\n const matrixNew = this.getNewIdMatrix(src);\n const matrixFrom = srcTable.__raw__.getIdMatrixFromArea(src);\n const matrixTo = this.getIdMatrixFromArea(dst);\n\n const diffBefore: CellsByIdType = {};\n const preserver = new ReferencePreserver(this);\n\n // to dst(to)\n const lostRows = putMatrix(this.idMatrix, matrixFrom, dst, ({ srcValue: srcId, dstValue: dstId }) => {\n if (srcId == null || dstId == null) {\n return false;\n }\n preserver.map[dstId] = srcId;\n preserver.addTheDependents(srcId, dstId);\n\n const srcCell = this.wire.data[srcId];\n const dstCell = this.wire.data[dstId];\n if (\n operator === 'USER' &&\n (operation.hasOperation(srcCell?.prevention, operation.MoveFrom) ||\n operation.hasOperation(dstCell?.prevention, operation.MoveTo))\n ) {\n return false;\n }\n const policy = this.policies[dstCell?.policy!] ?? defaultPolicy;\n const patch = policy.restrict({\n table: this,\n point: this.getPointById(dstId),\n patch: srcCell,\n original: dstCell,\n operation: operation.MoveTo,\n });\n if (patch) {\n diffBefore[srcId] = { ...srcCell };\n this.wire.data[srcId] = {\n ...srcCell,\n ...patch,\n system: {\n id: srcId,\n sheetId: this.sheetId,\n changedAt: new Date(),\n dependents: srcCell?.system?.dependents ?? new Set(),\n },\n };\n }\n if (srcCell != null) {\n this.setChangedAt(srcCell, new Date());\n }\n return true;\n });\n\n const srcTableRaw = srcTable.__raw__;\n const srcContext = this.wire.contextsBySheetId[srcTableRaw.sheetId];\n // to src(from)\n putMatrix(srcTableRaw.idMatrix, matrixNew, src, ({ srcValue: newId, dstValue: srcId, dstPoint: srcPoint }) => {\n // if the srcPoint is in the dst(Area), we do not need to rewrite\n if (among(dst, srcPoint) && srcTable === this) {\n return false;\n }\n preserver.map[srcId] = newId;\n const srcCell = srcTableRaw.wire.data[srcId];\n if (operator === 'USER' && operation.hasOperation(srcCell?.prevention, operation.MoveFrom)) {\n return false;\n }\n const policy = this.policies[srcCell?.policy!] ?? defaultPolicy;\n const patch = policy.restrict({\n table: srcTableRaw,\n point: srcTableRaw.getPointById(srcId),\n patch: undefined,\n original: srcCell,\n operation: operation.MoveFrom,\n });\n srcTableRaw.wire.data[newId] = {\n value: null,\n ...patch,\n system: {\n id: newId,\n sheetId: srcTableRaw.sheetId,\n changedAt: new Date(),\n dependents: srcCell?.system?.dependents ?? new Set(),\n },\n };\n return true;\n });\n\n const resolvedDiff = preserver.resolveDependents();\n Object.assign(diffBefore, resolvedDiff);\n if (srcTable !== this && srcContext !== null) {\n const { dispatch } = srcContext;\n requestAnimationFrame(() => {\n dispatch(updateTable(srcTableRaw));\n });\n }\n\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'MOVE',\n srcSheetId: srcTableRaw.sheetId,\n dstSheetId: this.sheetId,\n undoReflection,\n redoReflection,\n diffBefore,\n diffAfter: {},\n src,\n dst,\n matrixFrom,\n matrixTo,\n matrixNew,\n lostRows,\n });\n }\n\n // Call onEdit with cloned tables containing moved areas\n if (this.wire.onEdit) {\n // Clone srcTable with from area\n this.wire.onEdit({ table: srcTable.__raw__.trim(src) });\n this.wire.onEdit({ table: this.__raw__.trim(dst) });\n }\n\n return this.refresh(true);\n }\n\n public copy({\n srcTable = this,\n src,\n dst,\n onlyValue = false,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: MoveProps & { onlyValue?: boolean }) {\n const isXSheet = srcTable !== this;\n const { height: maxHeight, width: maxWidth } = areaShape({ ...src, base: 1 });\n const { top: topFrom, left: leftFrom } = src;\n const { top: topTo, left: leftTo, bottom: bottomTo, right: rightTo } = dst;\n const diff: CellsByAddressType = {};\n const changedAt = new Date();\n\n for (let i = 0; i <= bottomTo - topTo; i++) {\n const toY = topTo + i;\n if (toY > this.getNumRows()) {\n continue;\n }\n for (let j = 0; j <= rightTo - leftTo; j++) {\n const toX = leftTo + j;\n if (toX > this.getNumCols()) {\n continue;\n }\n const fromY = topFrom + (i % maxHeight);\n const fromX = leftFrom + (j % maxWidth);\n const slideY = isXSheet ? 0 : toY - fromY;\n const slideX = isXSheet ? 0 : toX - fromX;\n const cell: CellType = {\n ...srcTable.getCellByPoint(\n {\n y: topFrom + (i % maxHeight),\n x: leftFrom + (j % maxWidth),\n },\n 'SYSTEM',\n ),\n };\n const dstPoint = { y: toY, x: toX };\n const value = identifyFormula(cell?.value, {\n table: this,\n dependency: this.getId(dstPoint),\n slideY,\n slideX,\n });\n this.setChangedAt(cell, changedAt);\n const address = p2a(dstPoint);\n if (onlyValue) {\n const dstCell = this.getCellByPoint(dstPoint, 'SYSTEM');\n cell.style = dstCell?.style;\n cell.justifyContent = dstCell?.justifyContent;\n cell.alignItems = dstCell?.alignItems;\n }\n diff[address] = { ...cell, value };\n }\n }\n return this.update({\n diff,\n partial: false,\n operator,\n operation: operation.Copy,\n undoReflection,\n redoReflection,\n });\n }\n\n public getPolicyByPoint(point: PointType): PolicyType {\n const cell = this.getCellByPoint(point, 'SYSTEM');\n if (cell?.policy == null) {\n return defaultPolicy;\n }\n return this.policies[cell.policy] ?? defaultPolicy;\n }\n\n private _update({\n diff,\n partial = true,\n updateChangedAt = true,\n ignoreFields = ['labeler'],\n operator = 'SYSTEM',\n operation: op = operation.Update,\n formulaIdentify = true,\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n ignoreFields?: (keyof CellType)[];\n operator?: OperatorType;\n operation?: OperationType;\n formulaIdentify?: boolean;\n }) {\n const diffBefore: CellsByIdType = {};\n const diffAfter: CellsByIdType = {};\n const changedAt = new Date();\n\n let resized = false;\n Object.keys(diff).forEach((address) => {\n const point = a2p(address);\n const id = this.getId(point);\n const original = this.wire.data[id]!;\n if (operator === 'USER' && operation.hasOperation(original.prevention, operation.Update)) {\n return;\n }\n\n let patch: Record<string, any> = { ...diff[address] };\n\n if (formulaIdentify) {\n patch.value = identifyFormula(patch.value, {\n table: this,\n dependency: id,\n });\n }\n ignoreFields.forEach((key) => {\n patch[key] = original?.[key];\n });\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.Write)) {\n delete patch.value;\n }\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.Style)) {\n delete patch?.style?.justifyContent;\n delete patch?.style?.alignItems;\n }\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.Resize)) {\n delete patch?.style?.width;\n delete patch?.style?.height;\n }\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.SetRenderer)) {\n delete patch?.renderer;\n }\n if (operator === 'USER' && operation.hasOperation(original?.prevention, operation.SetParser)) {\n delete patch?.parser;\n }\n if (updateChangedAt) {\n this.setChangedAt(patch, changedAt);\n }\n if (patch.width != null || patch.height != null) {\n resized = true;\n }\n // must not partial\n diffBefore[id] = { ...original };\n\n const policy = this.policies[original.policy!] ?? defaultPolicy;\n const p = policy.restrict({\n table: this,\n point,\n patch,\n original,\n operation: op,\n });\n patch = { ...p, system: { ...original.system!, changedAt } };\n if (partial) {\n diffAfter[id] = this.wire.data[id] = { ...original, ...patch };\n } else {\n diffAfter[id] = this.wire.data[id] = patch;\n }\n });\n\n // Call onEdit with cloned table containing updated area\n if (this.wire.onEdit && Object.keys(diff).length > 0) {\n const updatedArea = this.getUpdatedArea(diff);\n this.wire.onEdit({ table: this.__raw__.trim(updatedArea) });\n }\n\n //this.clearSolvedCaches();\n return {\n diffBefore,\n diffAfter,\n resized,\n };\n }\n\n public update({\n diff,\n partial = true,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n operation: op = operation.Update,\n undoReflection,\n redoReflection,\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n operation?: OperationType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n const { diffBefore, diffAfter, resized } = this._update({\n diff,\n partial,\n operator,\n operation: op,\n updateChangedAt,\n });\n\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'UPDATE',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection,\n redoReflection,\n diffBefore,\n diffAfter,\n partial,\n });\n }\n return this.refresh(false, resized);\n }\n\n public writeRawCellMatrix({\n point,\n matrix,\n updateChangedAt = true,\n historicize = true,\n onlyValue = false,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n point: PointType;\n matrix: MatrixType<RawCellType>;\n updateChangedAt?: boolean;\n historicize?: boolean;\n onlyValue?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n const { y: baseY, x: baseX } = point;\n const diff: CellsByAddressType = {};\n matrix.forEach((cells, i) => {\n const y = baseY + i;\n if (y > this.bottom) {\n return;\n }\n cells.forEach((newCell, j) => {\n const x = baseX + j;\n if (x > this.right) {\n return;\n }\n\n const point = { y, x };\n const parsed = this.parse(point, newCell.value ?? '');\n parsed.style = { ...newCell.style, ...parsed.style };\n if (onlyValue) {\n const currentCell = this.getCellByPoint(point, 'SYSTEM');\n parsed.style = currentCell?.style;\n parsed.justifyContent = currentCell?.justifyContent;\n parsed.alignItems = currentCell?.alignItems;\n }\n diff[p2a(point)] = parsed;\n });\n });\n return this.update({\n diff,\n partial: true,\n updateChangedAt,\n historicize,\n operator,\n operation: operation.Write,\n undoReflection,\n redoReflection,\n });\n }\n\n public writeMatrix(props: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n const matrixWithStyle: MatrixType<RawCellType> = props.matrix.map((row) => row.map((value) => ({ value })));\n return this.writeRawCellMatrix({ ...props, matrix: matrixWithStyle });\n }\n\n public write(props: {\n point: PointType;\n value: string;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n const { point, value } = props;\n const parsed = this.parse(point, value ?? '');\n const current = this.getCellByPoint(point, 'RAW');\n if (current?.value === parsed.value) {\n // no change\n return this;\n }\n const diff = { [p2a(point)]: parsed };\n return this.update({\n ...props,\n diff,\n partial: true,\n operation: operation.Write,\n });\n }\n\n public insertRows({\n y,\n numRows,\n baseY,\n diff,\n partial,\n updateChangedAt,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n y: number;\n numRows: number;\n baseY: number;\n diff?: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n if (this.maxNumRows !== -1 && this.getNumRows() + numRows > this.maxNumRows) {\n console.error(`Rows are limited to ${this.maxNumRows}.`);\n return this;\n }\n const numCols = this.getNumCols(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i < numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getCellByPoint({ y: baseY, x: j }, 'SYSTEM');\n const copied = this.copyCellLayout(cell);\n this.wire.data[id] = {\n ...copied,\n system: {\n id,\n sheetId: this.sheetId,\n changedAt,\n dependents: new Set(),\n },\n };\n }\n rows.push(row);\n }\n this.idMatrix.splice(y, 0, ...rows);\n this.area.bottom += numRows;\n\n this.pushHistory({\n applyed: true,\n operation: 'INSERT_ROWS',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection,\n redoReflection,\n y,\n numRows,\n idMatrix: rows,\n });\n\n // If diff is provided, update the cells after insertion\n if (diff) {\n Object.assign(this.wire.lastHistory!, this._update({ diff, partial, updateChangedAt, operator }), { partial });\n }\n if (this.wire.onInsertRows) {\n const cloned = this.clone();\n cloned.area = {\n top: y,\n bottom: y + numRows - 1,\n left: this.area.left,\n right: this.area.right,\n };\n cloned.addressCaches = new Map();\n this.wire.onInsertRows({ table: cloned, y, numRows });\n }\n return this.refresh(true, true);\n }\n public removeRows({\n y,\n numRows,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n y: number;\n numRows: number;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n if (this.minNumRows !== -1 && this.getNumRows() - numRows < this.minNumRows) {\n console.error(`At least ${this.minNumRows} row(s) are required.`);\n return this;\n }\n\n const preserver = new ReferencePreserver(this);\n const ys: number[] = [];\n const backup = this.idMatrix.map((ids) => [...ids]); // backup before deletion\n\n for (let yi = y; yi < y + numRows; yi++) {\n const cell = this.getCellByPoint({ y: yi, x: 0 }, 'SYSTEM');\n if (operator === 'USER' && operation.hasOperation(cell?.prevention, operation.RemoveRows)) {\n console.warn(`Cannot delete row ${yi}.`);\n return this;\n }\n for (let xi = 1; xi <= this.getNumCols(); xi++) {\n const id = this.getId({ y: yi, x: xi });\n if (id == null) {\n continue;\n }\n preserver.addTheDependents(id);\n preserver.map[id] = this.getId({ y: yi + numRows, x: xi });\n }\n ys.unshift(yi);\n }\n const deleted: MatrixType = [];\n ys.forEach((y) => {\n const row = this.idMatrix.splice(y, 1);\n deleted.unshift(row[0]);\n });\n this.area.bottom -= ys.length;\n\n const diffBefore = preserver.resolveDependents('removeRows');\n\n this.pushHistory({\n applyed: true,\n operation: 'REMOVE_ROWS',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection,\n redoReflection,\n ys: ys.reverse(),\n diffBefore,\n deleted,\n });\n\n if (this.wire.onRemoveRows) {\n const cloned = this.clone();\n cloned.idMatrix = backup;\n cloned.area = {\n top: y,\n bottom: y + numRows - 1,\n left: this.area.left,\n right: this.area.right,\n };\n cloned.addressCaches = new Map();\n this.wire.onRemoveRows({ table: cloned, ys: ys.reverse() });\n }\n return this.refresh(true, true);\n }\n\n public insertCols({\n x,\n numCols,\n baseX,\n diff,\n partial,\n updateChangedAt,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n x: number;\n numCols: number;\n baseX: number;\n diff?: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n if (this.maxNumCols !== -1 && this.getNumCols() + numCols > this.maxNumCols) {\n console.error(`Columns are limited to ${this.maxNumCols}.`);\n return this;\n }\n const numRows = this.getNumRows(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i <= numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getCellByPoint({ y: i, x: baseX }, 'SYSTEM');\n const copied = this.copyCellLayout(cell);\n this.idMatrix[i].splice(x, 0, id);\n this.wire.data[id] = {\n ...copied,\n system: {\n id,\n sheetId: this.sheetId,\n changedAt,\n dependents: new Set(),\n },\n };\n }\n rows.push(row);\n }\n this.area.right += numCols;\n\n this.pushHistory({\n applyed: true,\n operation: 'INSERT_COLS',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection: undoReflection,\n redoReflection: redoReflection,\n x,\n numCols,\n idMatrix: rows,\n });\n\n // If diff is provided, update the cells after insertion\n if (diff) {\n Object.assign(this.wire.lastHistory!, this._update({ diff, partial, updateChangedAt, operator }), { partial });\n }\n if (this.wire.onInsertCols) {\n const cloned = this.clone();\n cloned.area = {\n top: this.area.top,\n bottom: this.area.bottom,\n left: x,\n right: x + numCols - 1,\n };\n cloned.addressCaches = new Map();\n this.wire.onInsertCols({ table: cloned, x, numCols });\n }\n return this.refresh(true, true);\n }\n public removeCols({\n x,\n numCols,\n operator = 'SYSTEM',\n undoReflection,\n redoReflection,\n }: {\n x: number;\n numCols: number;\n operator?: OperatorType;\n undoReflection?: StorePatchType;\n redoReflection?: StorePatchType;\n }) {\n if (this.minNumCols !== -1 && this.getNumCols() - numCols < this.minNumCols) {\n console.error(`At least ${this.minNumCols} column(s) are required.`);\n return this;\n }\n\n const preserver = new ReferencePreserver(this);\n const xs: number[] = [];\n const backup = this.idMatrix.map((ids) => [...ids]); // backup before deletion\n\n for (let xi = x; xi < x + numCols; xi++) {\n const cell = this.getCellByPoint({ y: 0, x: xi }, 'SYSTEM');\n if (operator === 'USER' && operation.hasOperation(cell?.prevention, operation.RemoveCols)) {\n console.warn(`Cannot delete col ${xi}.`);\n continue;\n }\n for (let yi = 1; yi <= this.getNumRows(); yi++) {\n const id = this.getId({ y: yi, x: xi });\n if (id == null) {\n continue;\n }\n preserver.addTheDependents(id);\n preserver.map[id] = this.getId({ y: yi, x: xi + numCols });\n }\n xs.unshift(xi);\n }\n\n const deleted: MatrixType = [];\n this.idMatrix.forEach((row) => {\n const deleting: Ids = [];\n deleted.push(deleting);\n // reverse and delete\n xs.forEach((x) => {\n deleting.unshift(...row.splice(x, 1));\n });\n });\n this.area.right -= xs.length;\n const diffBefore = preserver.resolveDependents('removeCols');\n\n this.pushHistory({\n applyed: true,\n operation: 'REMOVE_COLS',\n srcSheetId: this.sheetId,\n dstSheetId: this.sheetId,\n undoReflection: undoReflection,\n redoReflection: redoReflection,\n xs: xs.reverse(),\n diffBefore,\n deleted,\n });\n\n if (this.wire.onRemoveCols) {\n const cloned = this.clone();\n cloned.idMatrix = backup;\n cloned.area = {\n top: this.area.top,\n bottom: this.area.bottom,\n left: x,\n right: x + numCols - 1,\n };\n cloned.addressCaches = new Map();\n this.wire.onRemoveCols({ table: cloned, xs: xs.reverse() });\n }\n return this.refresh(true, true);\n }\n public getHistories() {\n return [...this.wire.histories];\n }\n public getHistoryIndex() {\n return this.wire.historyIndex;\n }\n public getHistorySize() {\n return this.wire.histories.length;\n }\n public getHistoryLimit() {\n return this.wire.historyLimit;\n }\n\n public getArea(): AreaType {\n return { ...this.area };\n }\n\n public parse(point: PointType, value: string) {\n const cell = this.getCellByPoint(point, 'SYSTEM') ?? {};\n const parser = this.parsers[cell.parser ?? ''] ?? defaultParser;\n return parser.call(value, cell);\n }\n\n public render(props: RendererCallProps) {\n const { point, sync } = props;\n const cell = this.getCellByPoint(point, 'SYSTEM') ?? {};\n const renderer = this.renderers[cell.renderer ?? ''] ?? defaultRenderer;\n return renderer.call({ table: this, point, sync });\n }\n\n public stringify({\n point,\n cell,\n refEvaluation = 'COMPLETE',\n }: {\n point: PointType;\n cell?: CellType;\n refEvaluation?: RefEvaluation;\n }) {\n if (cell == null) {\n cell = this.getCellByPoint(point, refEvaluation, true);\n }\n if (cell == null) {\n return '';\n }\n const renderer = this.renderers[cell?.renderer ?? ''] ?? defaultRenderer;\n const s = renderer.stringify({ value: cell.value, cell, table: this, point });\n\n if (s[0] === '=') {\n if (refEvaluation === 'SYSTEM') {\n return s; // do not evaluate system references\n }\n if (refEvaluation === 'RAW') {\n const lexer = new Lexer(s.substring(1));\n lexer.tokenize();\n return '=' + lexer.display({ table: this });\n }\n const solved = solveFormula({ value: s, table: this, raise: false, refEvaluation, origin: point });\n const value = stripTable({ value: solved, raise: false });\n return renderer.stringify({ value, cell, table: this, point });\n }\n return s;\n }\n\n public trim(area: AreaType): Table {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n copied.area = area;\n // this causes RangeError on circular reference(maximum call stack size exceeded)\n // copied.solvedCaches = {};\n return copied;\n }\n\n private applyDiff(diff: CellsByIdType = {}, partial = true) {\n if (!partial) {\n //Object.assign(this.wire.data, diff);\n Object.keys(diff).forEach((id) => {\n const cell = diff[id] ?? {};\n this.setChangedAt(cell);\n this.wire.data[id] = { ...cell };\n });\n return;\n }\n Object.keys(diff).map((id) => {\n const cell = diff[id] ?? {};\n this.setChangedAt(cell);\n this.wire.data[id] = { ...this.getById(id), ...cell };\n });\n }\n\n public undo() {\n if (this.wire.historyIndex < 0) {\n return { history: null, newTable: this.__raw__ };\n }\n const history = this.wire.histories[this.wire.historyIndex--];\n history.applyed = false;\n this.wire.currentHistory = this.wire.histories[this.wire.historyIndex];\n\n const srcTable = this.getTableBySheetId(history.srcSheetId);\n const dstTable = this.getTableBySheetId(history.dstSheetId);\n\n if (!dstTable) {\n return { history: null, newTable: this.__raw__ };\n }\n\n switch (history.operation) {\n case 'UPDATE':\n dstTable.applyDiff(history.diffBefore, false);\n break;\n case 'INSERT_ROWS': {\n if (history.diffBefore) {\n dstTable.applyDiff(history.diffBefore, history.partial);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n dstTable.idMatrix.splice(history.y, height);\n dstTable.area.bottom -= height;\n break;\n }\n case 'INSERT_COLS': {\n if (history.diffBefore) {\n dstTable.applyDiff(history.diffBefore, false);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n dstTable.idMatrix.forEach((row) => {\n row.splice(history.x, width);\n });\n dstTable.area.right -= width;\n break;\n }\n case 'REMOVE_ROWS': {\n const { ys, deleted } = history;\n ys.forEach((y, i) => {\n dstTable.idMatrix.splice(y, 0, deleted[i]);\n });\n dstTable.area.bottom += ys.length;\n this.applyDiff(history.diffBefore, false);\n break;\n }\n case 'REMOVE_COLS': {\n const { xs, deleted } = history;\n dstTable.idMatrix.forEach((row, i) => {\n for (let j = 0; j < xs.length; j++) {\n row.splice(xs[j], 0, deleted[i][j]);\n }\n });\n dstTable.area.right += xs.length;\n this.applyDiff(history.diffBefore, false);\n break;\n }\n case 'MOVE': {\n const { top: yFrom, left: xFrom } = history.src;\n const { top: yTo, left: xTo } = history.dst;\n const { height: rows, width: cols } = matrixShape({\n matrix: history.matrixFrom,\n base: -1,\n });\n if (srcTable) {\n putMatrix(srcTable.idMatrix, history.matrixFrom, {\n top: yFrom,\n left: xFrom,\n bottom: yFrom + rows,\n right: xFrom + cols,\n });\n }\n putMatrix(dstTable.idMatrix, history.matrixTo, {\n top: yTo,\n left: xTo,\n bottom: yTo + rows,\n right: xTo + cols,\n });\n // Restore original cell states\n dstTable.applyDiff(history.diffBefore, false);\n // Restore original formulas\n if (history.diffAfter) {\n dstTable.applyDiff(history.diffAfter, false);\n }\n break;\n }\n }\n this.refresh(shouldTracking(history.operation), true);\n return {\n history,\n callback: ({ tableReactive: tableRef }: StoreType) => {\n tableRef.current?.wire.transmit(history.undoReflection?.transmit);\n },\n };\n }\n\n public redo() {\n if (this.wire.historyIndex + 1 >= this.wire.histories.length) {\n return { history: null, newTable: this.__raw__ };\n }\n const history = this.wire.histories[++this.wire.historyIndex];\n history.applyed = true;\n this.wire.currentHistory = history;\n\n const srcTable = this.getTableBySheetId(history.srcSheetId);\n const dstTable = this.getTableBySheetId(history.dstSheetId);\n\n if (!dstTable) {\n return { history: null, newTable: this.__raw__ };\n }\n\n switch (history.operation) {\n case 'UPDATE':\n dstTable.applyDiff(history.diffAfter, history.partial);\n break;\n case 'INSERT_ROWS': {\n if (history.diffAfter) {\n dstTable.applyDiff(history.diffAfter, history.partial);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n dstTable.idMatrix.splice(history.y, 0, ...history.idMatrix);\n dstTable.area.bottom += height;\n break;\n }\n case 'INSERT_COLS': {\n if (history.diffAfter) {\n dstTable.applyDiff(history.diffAfter, history.partial);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n dstTable.idMatrix.map((row, i) => {\n row.splice(history.x, 0, ...history.idMatrix[i]);\n });\n dstTable.area.right += width;\n break;\n }\n case 'REMOVE_ROWS': {\n dstTable.removeRows({\n y: history.ys[0],\n numRows: history.ys.length,\n operator: 'SYSTEM',\n undoReflection: history.undoReflection,\n redoReflection: history.redoReflection,\n });\n break;\n }\n case 'REMOVE_COLS': {\n dstTable.removeCols({\n x: history.xs[0],\n numCols: history.xs.length,\n operator: 'SYSTEM',\n undoReflection: history.undoReflection,\n redoReflection: history.redoReflection,\n });\n break;\n }\n case 'MOVE': {\n const { src, dst } = history;\n if (srcTable) {\n dstTable.move({ srcTable, src, dst, operator: 'USER', historicize: false });\n }\n }\n }\n this.refresh(shouldTracking(history.operation), true);\n return {\n history,\n callback: ({ tableReactive: tableRef }: StoreType) => {\n tableRef.current?.wire.transmit(history.redoReflection?.transmit);\n },\n };\n }\n public getFunction(name: string) {\n return this.functions[name];\n }\n\n public getLabel(key: string | undefined, n: number) {\n if (key == null) {\n return null;\n }\n const labeler = this.labelers[key];\n return labeler?.(n);\n }\n public getBase() {\n return this;\n }\n\n public getSolvedCache(point: PointType) {\n const id = this.getId(point);\n return this.wire.solvedCaches.get(id);\n }\n public setSolvedCache(point: PointType, value: any) {\n const id = this.getId(point);\n this.wire.solvedCaches.set(id, value);\n }\n public clearSolvedCaches() {\n this.wire.solvedCaches.clear();\n }\n public sheetPrefix(omit = false) {\n if (omit) {\n return '';\n }\n return getSheetPrefix(this.sheetName);\n }\n public rangeToArea(range: string) {\n const cells = range.split(':');\n let [start, end] = cells;\n if (start.match(/[a-zA-Z]$/)) {\n start += '1';\n }\n if (start.match(/^[1-9]/)) {\n start = `A${start}`;\n }\n if (end?.match(/[a-zA-Z]$/)) {\n end += this.bottom;\n }\n if (end?.match(/^[1-9]/)) {\n end = `${x2c(this.right)}${end}`;\n }\n const { y: top, x: left } = a2p(start);\n const { y: bottom, x: right } = a2p(end || start);\n return {\n top: Math.abs(top),\n left: Math.abs(left),\n bottom: Math.abs(bottom),\n right: Math.abs(right),\n };\n }\n\n get __raw__(): Table {\n return this;\n }\n}\n","export const isTouching = (e: React.TouchEvent | React.MouseEvent): boolean => {\n if (e.type.startsWith('touch')) {\n return (e as React.TouchEvent).touches.length > 0;\n }\n if (e.type.startsWith('mouse')) {\n const mouseEvent = e as React.MouseEvent;\n // left click only\n return !!(mouseEvent.buttons & 1) && mouseEvent.button === 0;\n }\n return false;\n};\n\n/**\n * Safely call preventDefault to avoid errors on touch events\n */\nexport const safePreventDefault = (e: React.MouseEvent | React.TouchEvent): void => {\n if (!e.type.startsWith('touch')) {\n e.preventDefault();\n }\n};\n","import { useContext, useRef, useCallback, useEffect, memo, useMemo } from 'react';\nimport { x2c, y2r } from '../lib/converters';\nimport { zoneToArea, among, areaToRange } from '../lib/structs';\nimport {\n choose,\n select,\n drag,\n write,\n setEditorRect,\n setContextMenuPosition,\n setAutofillDraggingTo,\n setEditingAddress,\n setDragging,\n submitAutofill,\n setStore,\n} from '../store/actions';\n\nimport { Context } from '../store';\nimport { FormulaError } from '../formula/evaluator';\nimport { insertRef, isRefInsertable } from '../lib/input';\nimport { isXSheetFocused } from '../store/helpers';\nimport type { FC, RefObject } from 'react';\nimport { isTouching, safePreventDefault } from '../lib/events';\nimport type { UserTable } from '../lib/table';\n\ntype Props = {\n y: number;\n x: number;\n};\n\nexport const Cell: FC<Props> = memo(({ y, x }) => {\n const rowId = y2r(y);\n const colId = x2c(x);\n const address = `${colId}${rowId}`;\n const { store, dispatch } = useContext(Context);\n const isFirstPointed = useRef(true);\n\n const cellRef = useRef<HTMLTableCellElement>(null);\n const {\n tableReactive: tableRef,\n editingAddress,\n choosing,\n selectingZone,\n leftHeaderSelecting,\n topHeaderSelecting,\n editorRef,\n showAddress,\n autofillDraggingTo,\n contextMenuItems,\n } = store;\n const table = tableRef.current;\n\n // Whether the focus is on another sheet\n const xSheetFocused = isXSheetFocused(store);\n\n const lastFocused = table?.wire.lastFocused;\n\n const selectingArea = zoneToArea(selectingZone); // (top, left) -> (bottom, right)\n\n const editing = editingAddress === address;\n const pointed = choosing.y === y && choosing.x === x;\n const _setEditorRect = useCallback(() => {\n const rect = cellRef.current?.getBoundingClientRect();\n if (rect == null) {\n return null;\n }\n dispatch(\n setEditorRect({\n y: rect.y,\n x: rect.x,\n height: rect.height,\n width: rect.width,\n }),\n );\n }, []);\n\n useEffect(() => {\n // Avoid setting coordinates on the initial render to account for shifts caused by redrawing due to virtualization.\n if (pointed && !isFirstPointed.current) {\n _setEditorRect();\n return;\n }\n isFirstPointed.current = false;\n }, [pointed, editing]);\n\n if (!table) {\n return null;\n }\n\n const cell = table.getCellByPoint({ y, x }, 'SYSTEM');\n const writeCell = useCallback((value: string) => {\n dispatch(write({ value }));\n }, []);\n\n const sync = useCallback((table: UserTable) => {\n dispatch(setStore({ tableReactive: { current: table.__raw__ } }));\n }, []);\n\n let errorMessage = '';\n let rendered: any;\n try {\n rendered = table.render({ table, point: { y, x }, sync });\n } catch (e: any) {\n if (e instanceof FormulaError) {\n errorMessage = e.message;\n rendered = e.code;\n } else {\n errorMessage = e.message;\n rendered = '#UNKNOWN';\n console.error(e);\n }\n // TODO: debug flag\n }\n const input = editorRef.current;\n\n const editingAnywhere = !!(table.wire.editingAddress || editingAddress);\n\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n safePreventDefault(e);\n\n if (!isTouching(e)) {\n return false;\n }\n if (!input) {\n return false;\n }\n\n // Single cell selection only for touch events\n if (e.type.startsWith('touch')) {\n // Blur the input field to commit current value when selecting via touch\n if (editingAnywhere && input) {\n input.blur();\n }\n dispatch(choose({ y, x }));\n dispatch(select({ startY: y, startX: x, endY: y, endX: x }));\n return true;\n }\n\n // Normal drag operation for mouse events\n if (e.shiftKey) {\n dispatch(drag({ y, x }));\n } else {\n dispatch(select({ startY: y, startX: x, endY: -1, endX: -1 }));\n }\n\n dispatch(setDragging(true));\n const fullAddress = `${table.sheetPrefix(!xSheetFocused)}${address}`;\n if (editingAnywhere) {\n const inserted = insertRef({ input: lastFocused || null, ref: fullAddress });\n if (inserted) {\n return false;\n }\n }\n\n table.wire.lastFocused = input;\n input.focus();\n dispatch(setEditingAddress(''));\n\n if (autofillDraggingTo) {\n return false;\n }\n\n if (editingAnywhere) {\n writeCell(input.value);\n }\n if (!e.shiftKey) {\n dispatch(choose({ y, x }));\n }\n return true;\n },\n [editingAnywhere, input, address, xSheetFocused, lastFocused, autofillDraggingTo, writeCell],\n );\n\n const handleDragEnd = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n if (e.type.startsWith('touch')) {\n return;\n }\n\n safePreventDefault(e);\n dispatch(setDragging(false));\n if (autofillDraggingTo) {\n dispatch(submitAutofill(autofillDraggingTo));\n input?.focus();\n return false;\n }\n if (editingAnywhere) {\n dispatch(drag({ y: -1, x: -1 }));\n }\n },\n [autofillDraggingTo, editingAnywhere, input],\n );\n\n const handleDragging = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n if (!isTouching(e)) {\n return false;\n }\n\n // Do nothing for touch events\n if (e.type.startsWith('touch')) {\n return false;\n }\n\n safePreventDefault(e);\n e.stopPropagation();\n\n if (autofillDraggingTo) {\n dispatch(setAutofillDraggingTo({ x, y }));\n return false;\n }\n if (leftHeaderSelecting) {\n dispatch(drag({ y, x: table.getNumCols() }));\n return false;\n }\n if (topHeaderSelecting) {\n dispatch(drag({ y: table.getNumRows(), x }));\n return false;\n }\n if (editingAnywhere && !isRefInsertable(lastFocused || null)) {\n return false;\n }\n dispatch(drag({ y, x }));\n\n if (editingAnywhere) {\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: x });\n const fullRange = `${table.sheetPrefix(!xSheetFocused)}${areaToRange(newArea)}`;\n insertRef({ input: lastFocused || null, ref: fullRange });\n }\n //table.wire.transmit(); // Force drawing because the formula is not reflected in largeInput\n return true;\n },\n [\n autofillDraggingTo,\n leftHeaderSelecting,\n topHeaderSelecting,\n table,\n editingAnywhere,\n lastFocused,\n selectingZone,\n xSheetFocused,\n ],\n );\n\n const handleAutofillMouseDown = useCallback((e: React.MouseEvent) => {\n dispatch(setAutofillDraggingTo({ x, y }));\n dispatch(setDragging(true));\n e.stopPropagation();\n }, []);\n\n // --- Memoize event handlers with useCallback ---\n const onContextMenu = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (contextMenuItems.length > 0) {\n e.stopPropagation();\n safePreventDefault(e);\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }\n return true;\n },\n [contextMenuItems.length],\n );\n\n const onDoubleClick = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n e.stopPropagation();\n safePreventDefault(e);\n setEditingAddress(address);\n const dblclick = document.createEvent('MouseEvents');\n dblclick.initEvent('dblclick', true, true);\n input?.dispatchEvent(dblclick);\n return false;\n },\n [address, input],\n );\n\n const autofillDragClass = useMemo(() => {\n if (!editing && pointed && selectingArea.bottom === -1) {\n return 'gs-autofill-drag';\n }\n\n if (selectingArea.bottom === y && selectingArea.right === x) {\n return 'gs-autofill-drag';\n }\n return 'gs-autofill-drag gs-hidden';\n }, [editing, pointed, selectingArea]);\n\n if (!input) {\n return (\n <td key={x} data-x={x} data-y={y} data-address={address} className=\"gs-cell gs-hidden\">\n <div className=\"gs-cell-inner-wrap\">\n <div className=\"gs-cell-inner\">\n <div className=\"gs-cell-rendered\"></div>\n </div>\n <div className=\"gs-autofill-drag\"></div>\n </div>\n </td>\n );\n }\n\n return (\n <td\n key={x}\n ref={cellRef}\n data-x={x}\n data-y={y}\n data-address={address}\n className={`gs-cell ${among(selectingArea, { y, x }) ? 'gs-selecting' : ''} ${pointed ? 'gs-choosing' : ''} ${\n editing ? 'gs-editing' : ''\n }`}\n style={{\n ...cell?.style,\n }}\n onContextMenu={onContextMenu}\n onDoubleClick={onDoubleClick}\n >\n <div\n className={`gs-cell-inner-wrap`}\n onMouseDown={handleDragStart}\n onTouchStart={handleDragStart}\n onMouseEnter={handleDragging}\n onMouseUp={handleDragEnd}\n >\n <div\n className={'gs-cell-inner'}\n style={{\n ...cell?.style,\n justifyContent: cell?.justifyContent || 'left',\n alignItems: cell?.alignItems || 'start',\n }}\n >\n {errorMessage && <div className=\"gs-formula-error-triangle\" title={errorMessage} />}\n {showAddress && <div className=\"gs-cell-label\">{address}</div>}\n <div className=\"gs-cell-rendered\">{rendered}</div>\n </div>\n <div className={autofillDragClass} onMouseDown={handleAutofillMouseDown}></div>\n </div>\n </td>\n );\n});\n","import type { CSSProperties } from 'react';\nimport { useEffect, useRef, useContext, useCallback } from 'react';\nimport { Context } from '../store';\nimport { drag, setAutofillDraggingTo, setDragging, submitAutofill } from '../store/actions';\nimport { getAreaInTabular } from '../lib/virtualization';\nimport { insertRef, isFocus } from '../lib/input';\nimport { areaToRange, zoneToArea } from '../lib/structs';\nimport { isXSheetFocused } from '../store/helpers';\n\ntype Props = {\n className?: string;\n style: CSSProperties;\n horizontal?: number;\n vertical?: number;\n};\n\nconst acceleration = 0.4;\nconst maxSpeed = 200;\n\nlet lastScrollTime = new Date().getTime();\nlet currentSpeed = 0;\n\nexport function ScrollHandle({ style, horizontal = 0, vertical = 0, className = '' }: Props) {\n const scrollRef = useRef<number | null>(null);\n const { store, dispatch } = useContext(Context);\n const {\n tabularRef,\n autofillDraggingTo,\n dragging,\n selectingZone,\n editorRef,\n tableReactive: tableRef,\n searchInputRef,\n editingAddress,\n } = store;\n const table = tableRef.current;\n\n let isScrolling = false;\n const xSheetFocused = isXSheetFocused(store);\n const editingAnywhere = !!(table?.wire.editingAddress || editingAddress);\n\n const getDestEdge = useCallback(\n (e: React.MouseEvent) => {\n if (!table) {\n return { x: -1, y: -1 };\n }\n if (horizontal == 0 && vertical == 0) {\n const tabularRect = tabularRef.current!.getBoundingClientRect();\n const { left, top, right, bottom } = tabularRect;\n horizontal = e.pageX > right ? 1 : e.pageX < left ? -1 : 0;\n if (horizontal === 0) {\n vertical = e.pageY > bottom ? 1 : e.pageY < top ? -1 : 0;\n }\n }\n const area = getAreaInTabular(tabularRef.current!);\n let { endX: x, endY: y } = selectingZone;\n if (horizontal) {\n x = horizontal > 0 ? area.right : area.left;\n } else if (vertical) {\n y = vertical > 0 ? area.bottom : area.top;\n }\n return { x, y };\n },\n [table, horizontal, vertical, selectingZone],\n );\n\n const scrollStep = useCallback(\n (e: React.MouseEvent) => {\n if (!isScrolling || tabularRef.current === null || !table) {\n return;\n }\n const now = new Date().getTime();\n if (now - lastScrollTime > 1000) {\n currentSpeed = 0;\n }\n lastScrollTime = now;\n\n tabularRef.current.scrollBy({\n left: currentSpeed * horizontal!,\n top: currentSpeed * vertical!,\n });\n editorRef.current!.focus();\n\n const { x, y } = getDestEdge(e);\n if (autofillDraggingTo) {\n const { y: curY, x: curX } = autofillDraggingTo;\n dispatch(setAutofillDraggingTo({ y: y === -1 ? curY : y, x: x === -1 ? curX : x }));\n } else {\n if (editingAnywhere) {\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: x });\n const sheetPrefix = table.sheetPrefix(!xSheetFocused);\n const sheetRange = areaToRange(newArea);\n const fullRange = `${sheetPrefix}${sheetRange}`;\n insertRef({ input: editorRef.current, ref: fullRange });\n }\n dispatch(drag({ y, x }));\n }\n currentSpeed = Math.min(currentSpeed + acceleration, maxSpeed);\n scrollRef.current = requestAnimationFrame(() => scrollStep(e));\n },\n [\n isScrolling,\n table,\n horizontal,\n vertical,\n autofillDraggingTo,\n editingAnywhere,\n selectingZone,\n xSheetFocused,\n getDestEdge,\n ],\n );\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (isScrolling) {\n return;\n }\n isScrolling = true;\n\n if (horizontal === 0 || vertical === 0) {\n const tabularRect = tabularRef.current!.getBoundingClientRect();\n const { left, top, right, bottom } = tabularRect;\n\n horizontal ||= e.pageX > right ? 1 : e.pageX < left ? -1 : 0;\n if (horizontal === 0) {\n vertical ||= e.pageY > bottom ? 1 : e.pageY < top ? -1 : 0;\n }\n }\n scrollRef.current = requestAnimationFrame(() => scrollStep(e));\n },\n [isScrolling, horizontal, vertical, scrollStep],\n );\n\n const stopScroll = useCallback(() => {\n if (scrollRef.current !== null) {\n cancelAnimationFrame(scrollRef.current);\n scrollRef.current = null;\n }\n isScrolling = false;\n if (!isFocus(searchInputRef.current)) {\n // Pressing Enter on a search result will not focus the editor.\n editorRef.current?.focus?.();\n }\n }, []);\n\n const handleMouseUp = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const area = getAreaInTabular(tabularRef.current!);\n if (area.bottom === -1 || area.right === -1) {\n return;\n }\n\n const { x, y } = getDestEdge(e);\n if (autofillDraggingTo) {\n const { y: curY, x: curX } = autofillDraggingTo;\n dispatch(submitAutofill({ y: y === -1 ? curY : y, x: x === -1 ? curX : x }));\n editorRef.current!.focus();\n } else {\n if (editingAnywhere) {\n // inserting a range\n dispatch(drag({ y: -1, x: -1 })); // Reset dragging\n }\n }\n },\n [autofillDraggingTo, editingAnywhere, getDestEdge],\n );\n\n const handleMouseUpWrapper = useCallback(\n (e: React.MouseEvent) => {\n stopScroll();\n dispatch(setDragging(false));\n requestAnimationFrame(() => handleMouseUp(e));\n },\n [stopScroll, handleMouseUp],\n );\n\n const handleMouseLeave = useCallback(() => {\n stopScroll();\n }, [stopScroll]);\n\n useEffect(() => {\n return stopScroll;\n }, [stopScroll]);\n\n if (!editorRef.current || (!dragging && !autofillDraggingTo)) {\n return <div className={`gs-scroll-handle gs-hidden ${className}`} />;\n }\n\n return (\n <div\n style={style}\n className={`gs-scroll-handle ${className}`}\n onMouseUp={(e) => {\n handleMouseUpWrapper(e);\n }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n />\n );\n}\n","import type { FC } from 'react';\nimport { useContext, useCallback, memo, useRef } from 'react';\nimport { x2c } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectCols,\n setAutofillDraggingTo,\n setContextMenuPosition,\n setDragging,\n setEditingAddress,\n setResizingPositionX,\n submitAutofill,\n write,\n} from '../store/actions';\nimport { DEFAULT_WIDTH } from '../constants';\nimport * as prevention from '../lib/operation';\nimport { insertRef } from '../lib/input';\nimport { isXSheetFocused } from '../store/helpers';\nimport { ScrollHandle } from './ScrollHandle';\nimport { isTouching, safePreventDefault } from '../lib/events';\nimport { useDebounceCallback } from './hooks';\n\ntype Props = {\n x: number;\n};\n\nexport const HeaderCellTop: FC<Props> = memo(({ x }) => {\n const colId = x2c(x);\n const { store, dispatch } = useContext(Context);\n\n const {\n tableReactive: tableRef,\n editingAddress,\n choosing,\n selectingZone,\n topHeaderSelecting,\n editorRef,\n autofillDraggingTo,\n dragging,\n contextMenuItems,\n } = store;\n const table = tableRef.current;\n\n const col = table?.getCellByPoint({ y: 0, x }, 'SYSTEM');\n const width = col?.width || DEFAULT_WIDTH;\n\n const xSheetFocused = isXSheetFocused(store);\n const lastFocused = table?.wire.lastFocused;\n\n const editingAnywhere = !!(table?.wire.editingAddress || editingAddress);\n\n const writeCell = useCallback(\n (value: string) => {\n dispatch(write({ value, point: choosing }));\n },\n [choosing],\n );\n\n const handleResizeMouseDown = useCallback((e: React.MouseEvent) => {\n dispatch(setResizingPositionX([x, e.clientX, e.clientX]));\n e.stopPropagation();\n safePreventDefault(e);\n }, []);\n\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n safePreventDefault(e);\n\n if (!isTouching(e) || !table) {\n return false;\n }\n\n if (dragging) {\n return false;\n }\n\n // Single column selection only for touch events\n if (e.type.startsWith('touch')) {\n // Blur the input field to commit current value when selecting via touch\n if (editingAnywhere && editorRef.current) {\n editorRef.current.blur();\n }\n dispatch(choose({ y: 1, x }));\n dispatch(select({ startY: 1, startX: x, endY: table.getNumRows(), endX: x }));\n return true;\n }\n\n dispatch(select({ startY: 1, startX: x, endY: -1, endX: x }));\n const fullAddress = `${table.sheetPrefix(!xSheetFocused)}${colId}:${colId}`;\n if (editingAnywhere) {\n const inserted = insertRef({ input: lastFocused || null, ref: fullAddress });\n if (inserted) {\n dispatch(select({ startY: table.getNumRows(), startX: x, endY: 0, endX: x }));\n return false;\n }\n }\n\n let startX = e.shiftKey ? selectingZone.startX : x;\n if (startX === -1) {\n startX = choosing.x;\n }\n\n dispatch(\n selectCols({\n range: { start: startX, end: x },\n numRows: table.getNumRows(),\n }),\n );\n\n if (editingAnywhere) {\n writeCell(lastFocused?.value ?? '');\n }\n dispatch(choose({ y: 1, x: startX }));\n dispatch(setEditingAddress(''));\n dispatch(setDragging(true));\n\n if (autofillDraggingTo) {\n return false;\n }\n return true;\n },\n [dragging, editingAnywhere, xSheetFocused, colId, lastFocused, selectingZone, choosing, autofillDraggingTo],\n );\n\n const handleDragEnd = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n if (e.type.startsWith('touch')) {\n return;\n }\n\n safePreventDefault(e);\n dispatch(setDragging(false));\n if (autofillDraggingTo) {\n editorRef.current!.focus();\n return false;\n }\n },\n [autofillDraggingTo],\n );\n\n const handleDragging = useDebounceCallback((e: React.MouseEvent | React.TouchEvent) => {\n if (!isTouching(e) || !table) {\n return false;\n }\n\n if (e.type.startsWith('touch')) {\n return false;\n }\n\n safePreventDefault(e);\n e.stopPropagation();\n\n if (autofillDraggingTo) {\n dispatch(setAutofillDraggingTo({ y: 1, x }));\n return false;\n }\n\n if (editingAnywhere) {\n const newArea = zoneToArea({ ...selectingZone, endY: 1, endX: x });\n const [left, right] = [x2c(newArea.left), x2c(newArea.right)];\n const fullRange = `${table.sheetPrefix(!xSheetFocused)}${left}:${right}`;\n insertRef({ input: lastFocused || null, ref: fullRange });\n }\n\n if (autofillDraggingTo == null) {\n const { startY } = selectingZone;\n if (startY === 1) {\n dispatch(drag({ y: table.getNumRows(), x }));\n } else {\n dispatch(drag({ y: 1, x }));\n }\n }\n return false;\n }, 100);\n\n if (!table) {\n return (\n <th data-x={x} className=\"gs-th gs-th-top gs-hidden\">\n <div className=\"gs-th-inner-wrap\">\n <div className=\"gs-th-inner\">\n <ScrollHandle style={{ position: 'absolute' }} vertical={-1} />\n <div className=\"gs-resizer\"></div>\n </div>\n </div>\n </th>\n );\n }\n\n return (\n <th\n data-x={x}\n className={`gs-th gs-th-top ${choosing.x === x ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startX, end: selectingZone.endX }, x)\n ? topHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ width, minWidth: width, maxWidth: width }}\n onContextMenu={(e) => {\n if (contextMenuItems.length > 0) {\n e.stopPropagation();\n safePreventDefault(e);\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }\n return true;\n }}\n >\n <div\n className=\"gs-th-inner-wrap\"\n onMouseDown={handleDragStart}\n onTouchStart={handleDragStart}\n onMouseEnter={handleDragging}\n onMouseUp={handleDragEnd}\n >\n <div className=\"gs-th-inner\" style={{ height: table.headerHeight, position: 'relative' }}>\n <ScrollHandle\n style={{\n position: 'absolute',\n zIndex: topHeaderSelecting ? -1 : 1,\n }}\n vertical={-1}\n />\n {table.getLabel(col?.labeler, x) ?? colId}\n <div\n className={`\n gs-resizer \n ${prevention.hasOperation(col?.prevention, prevention.Resize) ? 'gs-protected' : ''}\n ${dragging ? 'gs-hidden' : ''}`}\n style={{ height: table.headerHeight }}\n onMouseDown={handleResizeMouseDown}\n >\n <i />\n </div>\n </div>\n </div>\n </th>\n );\n});\n","import type { FC } from 'react';\nimport { useContext, useCallback, memo, useRef } from 'react';\nimport { y2r } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectRows,\n setAutofillDraggingTo,\n setContextMenuPosition,\n setDragging,\n setEditingAddress,\n setResizingPositionY,\n submitAutofill,\n write,\n} from '../store/actions';\nimport { DEFAULT_HEIGHT } from '../constants';\nimport * as prevention from '../lib/operation';\nimport { insertRef } from '../lib/input';\nimport { isXSheetFocused } from '../store/helpers';\nimport { ScrollHandle } from './ScrollHandle';\nimport { isTouching, safePreventDefault } from '../lib/events';\nimport { useDebounceCallback } from './hooks';\n\ntype Props = {\n y: number;\n};\n\nexport const HeaderCellLeft: FC<Props> = memo(({ y }) => {\n const rowId = `${y2r(y)}`;\n const { store, dispatch } = useContext(Context);\n\n const {\n choosing,\n editingAddress,\n selectingZone,\n leftHeaderSelecting,\n editorRef,\n tableReactive: tableRef,\n autofillDraggingTo,\n dragging,\n contextMenuItems,\n } = store;\n const table = tableRef.current;\n\n const row = table?.getCellByPoint({ y, x: 0 }, 'SYSTEM');\n const height = row?.height || DEFAULT_HEIGHT;\n\n const xSheetFocused = isXSheetFocused(store);\n const lastFocused = table?.wire.lastFocused;\n\n const editingAnywhere = !!(table?.wire.editingAddress || editingAddress);\n\n const writeCell = useCallback(\n (value: string) => {\n dispatch(write({ value, point: choosing }));\n },\n [choosing],\n );\n\n const handleResizeMouseDown = useCallback((e: React.MouseEvent) => {\n dispatch(setResizingPositionY([y, e.clientY, e.clientY]));\n e.stopPropagation();\n safePreventDefault(e);\n }, []);\n\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n safePreventDefault(e);\n\n if (!isTouching(e) || !table) {\n return false;\n }\n if (dragging) {\n return false;\n }\n\n // Single row selection only for touch events\n if (e.type.startsWith('touch')) {\n // Blur the input field to commit current value when selecting via touch\n if (editingAnywhere && editorRef.current) {\n editorRef.current.blur();\n }\n dispatch(choose({ y, x: 1 }));\n dispatch(select({ startY: y, startX: 1, endY: y, endX: table.getNumCols() }));\n return true;\n }\n\n // Normal drag operation for mouse events\n dispatch(select({ startY: y, startX: 1, endY: y, endX: -1 }));\n const fullAddress = `${table.sheetPrefix(!xSheetFocused)}${rowId}:${rowId}`;\n if (editingAnywhere) {\n const inserted = insertRef({ input: lastFocused || null, ref: fullAddress });\n if (inserted) {\n dispatch(select({ startY: y, startX: table.getNumCols(), endY: y, endX: 0 }));\n return false;\n }\n }\n\n let startY = e.shiftKey ? selectingZone.startY : y;\n if (startY === -1) {\n startY = choosing.y;\n }\n\n dispatch(\n selectRows({\n range: { start: startY, end: y },\n numCols: table.getNumCols(),\n }),\n );\n\n if (editingAnywhere) {\n writeCell(lastFocused?.value ?? '');\n }\n dispatch(choose({ y: startY, x: 1 }));\n dispatch(setEditingAddress(''));\n dispatch(setDragging(true));\n\n if (autofillDraggingTo) {\n return false;\n }\n return true;\n },\n [dragging, editingAnywhere, xSheetFocused, rowId, lastFocused, selectingZone, choosing, autofillDraggingTo],\n );\n\n const handleDragEnd = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation();\n if (e.type.startsWith('touch')) {\n return;\n }\n\n safePreventDefault(e);\n dispatch(setDragging(false));\n if (autofillDraggingTo) {\n editorRef.current!.focus();\n return false;\n }\n },\n [autofillDraggingTo],\n );\n\n const handleDragging = useDebounceCallback((e: React.MouseEvent | React.TouchEvent) => {\n if (!isTouching(e) || !table) {\n return false;\n }\n\n // Do nothing for touch events\n if (e.type.startsWith('touch')) {\n return false;\n }\n\n safePreventDefault(e);\n e.stopPropagation();\n\n if (autofillDraggingTo) {\n dispatch(setAutofillDraggingTo({ y, x: 1 }));\n return false;\n }\n\n if (editingAnywhere) {\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: 1 });\n const [top, bottom] = [y2r(newArea.top), y2r(newArea.bottom)];\n const fullRange = `${table.sheetPrefix(!xSheetFocused)}${top}:${bottom}`;\n insertRef({ input: lastFocused || null, ref: fullRange });\n }\n\n if (autofillDraggingTo == null) {\n const { startX } = selectingZone;\n if (startX === 1) {\n dispatch(drag({ y, x: table.getNumCols() }));\n } else {\n dispatch(drag({ y, x: 1 }));\n }\n }\n return false;\n }, 100);\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (contextMenuItems.length > 0) {\n e.stopPropagation();\n safePreventDefault(e);\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }\n return true;\n },\n [contextMenuItems.length],\n );\n\n if (!table) {\n return null;\n }\n\n return (\n <th\n data-y={y}\n className={`gs-th gs-th-left ${choosing.y === y ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startY, end: selectingZone.endY }, y)\n ? leftHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ height }}\n onContextMenu={handleContextMenu}\n >\n <div\n className=\"gs-th-inner-wrap\"\n onMouseDown={handleDragStart}\n onTouchStart={handleDragStart}\n onMouseEnter={handleDragging}\n onMouseUp={handleDragEnd}\n >\n <div className=\"gs-th-inner\" style={{ width: table.headerWidth, position: 'relative' }}>\n <ScrollHandle\n style={{\n position: 'absolute',\n zIndex: leftHeaderSelecting ? -1 : 1,\n }}\n horizontal={-1}\n />\n {table.getLabel(row?.labeler, y) ?? rowId}\n <div\n className={`\n gs-resizer\n ${prevention.hasOperation(row?.prevention, prevention.Resize) ? 'gs-protected' : ''}\n ${dragging ? 'gs-hidden' : ''}`}\n style={{ width: table.headerWidth }}\n onMouseDown={handleResizeMouseDown}\n ></div>\n </div>\n </div>\n </th>\n );\n});\n","import { useContext, useEffect, useRef, useCallback } from 'react';\nimport { Context } from '../store';\nimport { zoneToArea } from '../lib/structs';\nimport { between } from '../lib/structs';\nimport { a2p } from '../lib/converters';\nimport { COLOR_PALETTE } from '../lib/palette';\nimport { Autofill } from '../lib/autofill';\nimport { getCellRectPositions } from '../lib/virtualization';\nimport type { Table } from '../lib/table';\nimport type { FC } from 'react';\nimport type { RefPaletteType, AreaType, ModeType } from '../types';\n\nconst COLOR_POINTED = '#0077ff';\nconst COLOR_SELECTED = '#0077ff';\nconst SELECTING_FILL = 'rgba(0, 128, 255, 0.2)';\nconst COLOR_COPYING = '#0077ff';\nconst COLOR_CUTTING = '#0077ff';\nconst SEARCH_MATCHING_BACKGROUND = 'rgba(0, 200, 100, 0.2)';\nconst COLOR_SEARCH_MATCHING = '#00aa78';\nconst COLOR_AUTOFILL = '#444444';\n\nconst HEADER_COLORS = {\n light: {\n selecting: 'rgba(0, 0, 0, 0.1)',\n choosing: 'rgba(0, 0, 0, 0.2)',\n thSelecting: 'rgba(0, 0, 0, 0.55)',\n },\n dark: {\n selecting: 'rgba(255, 255, 255, 0.08)',\n choosing: 'rgba(255, 255, 255, 0.18)',\n thSelecting: 'rgba(255, 255, 255, 0.4)',\n },\n} as const;\n\ntype Props = {\n refs?: RefPaletteType;\n};\n\ntype Ctx2D = CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;\n\nconst fillRect = (ctx: Ctx2D, x: number, y: number, width: number, height: number, color: string) => {\n ctx.fillStyle = color;\n ctx.fillRect(x, y, width, height);\n};\n\nconst drawRect = (\n ctx: Ctx2D,\n x: number,\n y: number,\n width: number,\n height: number,\n color: string,\n lineWidth: number = 2,\n dashPattern: number[] = [],\n fillColor?: string,\n) => {\n if (fillColor) {\n ctx.fillStyle = fillColor;\n ctx.fillRect(x, y, width, height);\n }\n\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(dashPattern);\n ctx.strokeRect(x + lineWidth / 2, y + lineWidth / 2, width - lineWidth, height - lineWidth);\n ctx.setLineDash([]);\n};\n\n// Draw an area rect in viewport coordinates (absolute coords - scroll offset, clamped to viewport)\nconst drawAreaRectViewport = (\n ctx: Ctx2D,\n table: Table,\n scrollTop: number,\n scrollLeft: number,\n viewW: number,\n viewH: number,\n area: AreaType,\n color: string,\n lineWidth: number = 2,\n dashPattern: number[] = [],\n fillColor?: string,\n) => {\n const { top, left, bottom, right } = area;\n if (top === -1 || left === -1 || bottom === -1 || right === -1) {\n return;\n }\n\n const topLeft = getCellRectPositions(table, { y: top, x: left });\n const bottomRight = getCellRectPositions(table, { y: bottom, x: right });\n\n const x1 = topLeft.left - scrollLeft;\n const y1 = topLeft.top - scrollTop;\n const x2 = bottomRight.right - scrollLeft;\n const y2 = bottomRight.bottom - scrollTop;\n\n // Quick reject if entirely off-screen\n if (x2 < 0 || x1 > viewW || y2 < 0 || y1 > viewH) {\n return;\n }\n\n drawRect(ctx, x1, y1, x2 - x1, y2 - y1, color, lineWidth, dashPattern, fillColor);\n};\n\nexport const CellStateOverlay: FC<Props> = ({ refs = {} }) => {\n const { store } = useContext(Context);\n const {\n tableReactive,\n tabularRef,\n choosing,\n selectingZone,\n matchingCells,\n matchingCellIndex,\n autofillDraggingTo,\n topHeaderSelecting,\n leftHeaderSelecting,\n mode,\n dragging,\n } = store;\n const table = tableReactive.current;\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const rafIdRef = useRef<number>(0);\n const storeRef = useRef(store);\n storeRef.current = store;\n\n const drawCanvas = useCallback(() => {\n if (!table || !tabularRef.current || !canvasRef.current) {\n return;\n }\n\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const container = tabularRef.current;\n const dpr = window.devicePixelRatio || 1;\n const w = container.clientWidth;\n const h = container.clientHeight;\n\n // Resize canvas to viewport\n if (canvas.width !== w * dpr || canvas.height !== h * dpr) {\n canvas.style.width = `${w}px`;\n canvas.style.height = `${h}px`;\n canvas.width = w * dpr;\n canvas.height = h * dpr;\n }\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, w, h);\n\n const { wire } = table;\n const scrollTop = container.scrollTop;\n const scrollLeft = container.scrollLeft;\n const headerW = table.headerWidth;\n const headerH = table.headerHeight;\n\n // Clip cell-area drawing to exclude header region\n ctx.save();\n ctx.beginPath();\n ctx.rect(headerW, headerH, w - headerW, h - headerH);\n ctx.clip();\n\n // 1. Selecting zone (border + fill)\n const selectingArea = zoneToArea(selectingZone);\n drawAreaRectViewport(ctx, table, scrollTop, scrollLeft, w, h, selectingArea, COLOR_SELECTED, 1, [], SELECTING_FILL);\n\n // 2. Autofill dragging\n if (autofillDraggingTo) {\n const autofill = new Autofill(storeRef.current, autofillDraggingTo);\n drawAreaRectViewport(ctx, table, scrollTop, scrollLeft, w, h, autofill.wholeArea, COLOR_AUTOFILL, 1, [5, 5]);\n }\n\n // 3. Choosing (pointed cell)\n {\n const { y, x } = choosing;\n if (y !== -1 && x !== -1) {\n const pos = getCellRectPositions(table, { y, x });\n const vx = pos.left - scrollLeft;\n const vy = pos.top - scrollTop;\n drawRect(ctx, vx, vy, pos.width, pos.height, COLOR_POINTED, 2, []);\n }\n }\n\n // 4. Copying/Cutting zone\n const { copyingSheetId, copyingZone, cutting } = wire;\n if (table.sheetId === copyingSheetId) {\n const copyingArea = zoneToArea(copyingZone);\n const color = cutting ? COLOR_CUTTING : COLOR_COPYING;\n const dashPattern = cutting ? [4, 4] : [6, 4];\n drawAreaRectViewport(ctx, table, scrollTop, scrollLeft, w, h, copyingArea, color, 2.5, dashPattern);\n }\n\n // 5. Formula references (from palette)\n Object.entries(refs).forEach(([ref, i]) => {\n const palette = COLOR_PALETTE[i % COLOR_PALETTE.length];\n try {\n const refArea = table.rangeToArea(ref);\n drawAreaRectViewport(ctx, table, scrollTop, scrollLeft, w, h, refArea, palette, 2, [5, 5]);\n } catch (e) {\n // Invalid reference, skip\n }\n });\n\n // 6. Search matching cells\n matchingCells.forEach((address, index) => {\n const { y, x } = a2p(address);\n const pos = getCellRectPositions(table, { y, x });\n const vx = pos.left - scrollLeft;\n const vy = pos.top - scrollTop;\n\n // Skip if off-screen\n if (vx + pos.width < 0 || vx > w || vy + pos.height < 0 || vy > h) {\n return;\n }\n\n const isCurrentMatch = index === matchingCellIndex;\n drawRect(\n ctx,\n vx,\n vy,\n pos.width,\n pos.height,\n isCurrentMatch ? COLOR_SEARCH_MATCHING : 'transparent',\n isCurrentMatch ? 2 : 0,\n [],\n SEARCH_MATCHING_BACKGROUND,\n );\n });\n\n // Restore full canvas for header drawing\n ctx.restore();\n\n // 7. Header highlights (top and left) — using metadata O(1) lookup\n const headerColors = HEADER_COLORS[mode] || HEADER_COLORS.light;\n const numCols = table.getNumCols();\n const numRows = table.getNumRows();\n\n // Top headers\n for (let x = 1; x <= numCols; x++) {\n let color: string | null = null;\n if (between({ start: selectingZone.startX, end: selectingZone.endX }, x)) {\n color = topHeaderSelecting ? headerColors.thSelecting : headerColors.selecting;\n }\n if (choosing.x === x) {\n color = headerColors.choosing;\n }\n if (!color) {\n continue;\n }\n\n const pos = getCellRectPositions(table, { y: 1, x });\n const left = pos.left - scrollLeft;\n if (left + pos.width < headerW || left > w) {\n continue;\n }\n fillRect(ctx, left, 0, pos.width, headerH, color);\n }\n\n // Left headers\n for (let y = 1; y <= numRows; y++) {\n let color: string | null = null;\n if (between({ start: selectingZone.startY, end: selectingZone.endY }, y)) {\n color = leftHeaderSelecting ? headerColors.thSelecting : headerColors.selecting;\n }\n if (choosing.y === y) {\n color = headerColors.choosing;\n }\n if (!color) {\n continue;\n }\n\n const pos = getCellRectPositions(table, { y, x: 1 });\n const top = pos.top - scrollTop;\n if (top + pos.height < headerH || top > h) {\n continue;\n }\n fillRect(ctx, 0, top, headerW, pos.height, color);\n }\n }, [\n table,\n tabularRef,\n choosing,\n selectingZone,\n matchingCells,\n matchingCellIndex,\n autofillDraggingTo,\n topHeaderSelecting,\n leftHeaderSelecting,\n mode,\n dragging,\n refs,\n ]);\n\n // Schedule a draw on the next animation frame (for state changes)\n const scheduleDrawCanvas = useCallback(() => {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = requestAnimationFrame(drawCanvas);\n }, [drawCanvas]);\n\n // Draw synchronously on scroll to avoid 1-frame lag\n const handleScroll = useCallback(() => {\n drawCanvas();\n }, [drawCanvas]);\n\n useEffect(() => {\n scheduleDrawCanvas();\n return () => cancelAnimationFrame(rafIdRef.current);\n }, [scheduleDrawCanvas]);\n\n useEffect(() => {\n const container = tabularRef.current;\n if (!container) {\n return;\n }\n container.addEventListener('scroll', handleScroll);\n return () => {\n container.removeEventListener('scroll', handleScroll);\n };\n }, [tabularRef, handleScroll]);\n\n return (\n <div\n style={{\n position: 'sticky',\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n overflow: 'visible',\n pointerEvents: 'none',\n zIndex: 10,\n }}\n >\n <canvas\n ref={canvasRef}\n className=\"gs-cell-state-overlay\"\n style={{\n pointerEvents: 'none',\n display: 'block',\n }}\n />\n </div>\n );\n};\n","import { useEffect, useContext, useState, useCallback } from 'react';\n\nimport { Cell } from './Cell';\nimport { HeaderCellTop } from './HeaderCellTop';\nimport { HeaderCellLeft } from './HeaderCellLeft';\nimport { CellStateOverlay } from './CellStateOverlay';\n\nimport { Context } from '../store';\nimport { choose, select } from '../store/actions';\n\nimport type { RefPaletteType, Virtualization } from '../types';\nimport { virtualize } from '../lib/virtualization';\nimport { p2a, stripAddressAbsolute } from '../lib/converters';\nimport { Lexer, stripSheetName } from '../formula/evaluator';\nimport { ScrollHandle } from './ScrollHandle';\n\nexport const Tabular = () => {\n const [palette, setPalette] = useState<RefPaletteType>({});\n const { store, dispatch } = useContext(Context);\n const {\n tableReactive,\n choosing,\n editingAddress,\n tabularRef,\n mainRef,\n sheetWidth,\n sheetHeight,\n inputting,\n leftHeaderSelecting,\n topHeaderSelecting,\n } = store;\n const table = tableReactive.current;\n\n const [virtualized, setVirtualized] = useState<Virtualization | null>(null);\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleScroll = useCallback(\n (e: React.UIEvent<HTMLDivElement>) => {\n if (table) {\n setVirtualized(virtualize(table, e.currentTarget));\n }\n },\n [tableReactive],\n );\n\n const handleSelectAllClick = useCallback(() => {\n if (!table) {\n return;\n }\n dispatch(choose({ y: -1, x: -1 }));\n requestAnimationFrame(() => {\n dispatch(choose({ y: 1, x: 1 }));\n dispatch(\n select({\n startY: 1,\n startX: 1,\n endY: table.getNumRows(),\n endX: table.getNumCols(),\n }),\n );\n });\n }, [tableReactive]);\n\n useEffect(() => {\n if (!table) {\n return;\n }\n const formulaEditing = editingAddress && inputting.startsWith('=');\n if (!formulaEditing) {\n setPalette({});\n table.wire.paletteBySheetName = {};\n return;\n }\n const palette: RefPaletteType = {};\n const paletteBySheetName: { [sheetName: string]: RefPaletteType } = {};\n const lexer = new Lexer(inputting.substring(1));\n lexer.tokenize();\n\n let i = 0;\n for (const token of lexer.tokens) {\n if (token.type === 'REF' || token.type === 'RANGE') {\n const normalizedRef = stripAddressAbsolute(token.stringify());\n const splitterIndex = normalizedRef.indexOf('!');\n if (splitterIndex !== -1) {\n const sheetName = normalizedRef.substring(0, splitterIndex);\n const ref = normalizedRef.substring(splitterIndex + 1);\n const stripped = stripSheetName(sheetName);\n const upperRef = ref.toUpperCase();\n if (paletteBySheetName[stripped] == null) {\n paletteBySheetName[stripped] = {};\n }\n if (paletteBySheetName[stripped][upperRef] == null) {\n paletteBySheetName[stripped][upperRef] = i++;\n }\n } else {\n const upperRef = normalizedRef.toUpperCase();\n if (palette[upperRef] == null) {\n palette[upperRef] = i++;\n }\n }\n }\n }\n setPalette(palette);\n table.wire.paletteBySheetName = paletteBySheetName;\n }, [store.inputting, store.editingAddress, tableReactive]);\n\n useEffect(() => {\n if (!table) {\n return;\n }\n table.wire.choosingAddress = p2a(choosing);\n }, [choosing]);\n\n useEffect(() => {\n if (!table) {\n return;\n }\n setVirtualized(virtualize(table, tabularRef.current));\n }, [tabularRef.current, tableReactive, mainRef.current?.clientHeight, mainRef.current?.clientWidth]);\n\n const mergedRefs: RefPaletteType = {\n ...palette,\n ...(table ? table.wire.paletteBySheetName[table.sheetName] : {}),\n };\n\n if (!table || !table.wire.ready) {\n return null;\n }\n\n return (\n <>\n <div\n className=\"gs-tabular\"\n style={{\n width: sheetWidth === -1 ? undefined : sheetWidth,\n height: sheetHeight === -1 ? undefined : sheetHeight,\n }}\n ref={tabularRef}\n onMouseMove={handleMouseMove}\n onScroll={handleScroll}\n >\n <div\n className={'gs-tabular-inner'}\n style={{\n width: table.totalWidth + 1,\n height: table.totalHeight + 1,\n }}\n >\n <CellStateOverlay refs={mergedRefs} />\n <table className={`gs-table`}>\n <thead className=\"gs-thead\" style={{ height: table.headerHeight }}>\n <tr className=\"gs-row\">\n <th\n className=\"gs-th gs-th-left gs-th-top\"\n style={{ position: 'sticky', width: table.headerWidth, height: table.headerHeight }}\n onClick={handleSelectAllClick}\n >\n <div className=\"gs-th-inner\">\n <ScrollHandle\n className={leftHeaderSelecting || topHeaderSelecting ? 'gs-hidden' : ''}\n style={{ position: 'absolute' }}\n horizontal={leftHeaderSelecting ? 0 : -1}\n vertical={topHeaderSelecting ? 0 : -1}\n />\n </div>\n </th>\n <th\n className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-left\"\n style={{ width: virtualized?.adjuster?.left ?? 1 }}\n ></th>\n {virtualized?.xs?.map?.((x) => <HeaderCellTop x={x} key={x} />)}\n <th\n className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-right\"\n style={{ width: virtualized?.adjuster?.right }}\n ></th>\n </tr>\n </thead>\n\n <tbody className=\"gs-table-body-adjuster\">\n <tr className=\"gs-row\">\n <th\n className={`gs-adjuster gs-adjuster-horizontal gs-adjuster-vertical`}\n style={{ height: virtualized?.adjuster?.top ?? 1 }}\n ></th>\n <td className=\"gs-adjuster gs-adjuster-vertical\"></td>\n {virtualized?.xs?.map((x) => <td className=\"gs-adjuster gs-adjuster-vertical\" key={x}></td>)}\n <th className={`gs-adjuster gs-adjuster-horizontal gs-adjuster-vertical`}></th>\n </tr>\n </tbody>\n\n <tbody className=\"gs-table-body-data\">\n {virtualized?.ys?.map((y) => {\n return (\n <tr key={y} className=\"gs-row\">\n <HeaderCellLeft y={y} />\n <td className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-left\" />\n {virtualized?.xs?.map((x) => <Cell key={x} y={y} x={x} />)}\n <td className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-right\" />\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n </>\n );\n};\n","// pnpm generate-style\nexport const LAST_MODIFIED = 1770663713;\nexport const CSS = `.gs-root1{display:inline-block;position:relative;border-spacing:0;width:fit-content;max-width:100%;line-height:normal;overflow:auto;font-family:\"SF Pro Text\",\"SF Pro Icons\",\"Helvetica Neue\",Helvetica,Arial,Meiryo,sans-serif;visibility:hidden;opacity:0}.gs-root1.gs-initialized{visibility:visible;opacity:1;transition:opacity .2s ease-in-out}.gs-root1 .gs-main{flex:1;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.gs-root1 .gs-resizing{width:100%;height:100%;position:absolute;background-color:rgba(0,127,255,.08);top:0;left:0;z-index:2}.gs-root1 .gs-line-horizontal{width:100%}.gs-root1 .gs-line-vertical{height:100%}.gs-root1 .gs-line{position:relative;top:0;left:0;border:dotted 1px #07f;box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:#07f;color:#fff;margin:0;position:absolute;top:0;left:0}.gs-root1 .gs-scroll-handle{width:100%;height:100%;cursor:cell}.gs-hidden{visibility:hidden;position:absolute;top:0;left:0;width:0;height:0;overflow:hidden;pointer-events:none;z-index:-1}.gs-fixed{position:fixed;top:0;left:0;z-index:1}.gs-root1[data-mode=light]{background-color:#e2e2e2;color:#000}.gs-root1[data-mode=light] .gs-main{background-color:#e2e2e2;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd}.gs-root1[data-mode=light] .gs-tabular{background-color:#e2e2e2}.gs-root1[data-mode=light] .gs-formula-bar{background-color:#efefef}.gs-root1[data-mode=light] .gs-formula-bar-editor-inner{color:#555}.gs-root1[data-mode=light] .gs-cell{border-top:solid 1px #ddd;border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-adjuster{background-color:#ddd}.gs-root1[data-mode=light] .gs-tabular-inner{background-color:#f7f7f7}.gs-root1[data-mode=light] .gs-th{background-color:#efefef;color:#666}.gs-root1[data-mode=light] .gs-th-top{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-top .gs-th-inner{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left .gs-th-inner{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-search-bar{color:rgba(0,0,0,.3)}.gs-editor[data-mode=light].gs-editing textarea{caret-color:#000000}.gs-editor[data-mode=light].gs-editing .gs-editor-hl{background-color:#f7f7f7;color:#000}.gs-editor[data-mode=light] .gs-editor-options{color:#000;background-color:#f7f7f7;border:solid 1px #ddd}.gs-root1[data-mode=dark]{background-color:#5a5a5a;color:#eee}.gs-root1[data-mode=dark] .gs-main{background-color:#3f3f3f;border-right:solid 1px #5a5a5a;border-bottom:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-tabular{background-color:#3f3f3f}.gs-root1[data-mode=dark] .gs-formula-bar{background-color:#4f4f4f}.gs-root1[data-mode=dark] .gs-formula-bar-editor-inner{color:#bbb}.gs-root1[data-mode=dark] .gs-cell{border-top:solid 1px #5a5a5a;border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-adjuster{background-color:#5a5a5a}.gs-root1[data-mode=dark] .gs-tabular-inner{background-color:#212121}.gs-root1[data-mode=dark] .gs-large-editor textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-th{background-color:#4f4f4f;color:#eee}.gs-root1[data-mode=dark] .gs-th-top{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-top .gs-th-inner{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left .gs-th-inner{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-search-bar textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-search-bar{color:rgba(255,255,255,.3)}.gs-editor[data-mode=dark].gs-editing textarea{caret-color:#eeeeee}.gs-editor[data-mode=dark].gs-editing .gs-editor-hl{background-color:#212121;color:#eee}.gs-editor[data-mode=dark] .gs-editor-options{color:#eee;background-color:#5a5a5a;border:solid 1px #5a5a5a}.gs-cell{transition:border-color .2s ease;padding:0;margin:0;box-sizing:border-box;position:relative;font-size:13px;letter-spacing:1px;line-height:24px;cursor:cell;user-select:none;-webkit-user-select:none;-moz-user-select:none}.gs-cell.gs-copying textarea:focus{outline:solid 1px #0077ff}.gs-cell.gs-selecting{z-index:1}.gs-cell.gs-selecting .gs-cell-label{display:block}.gs-cell.gs-choosing{margin-top:-1px;margin-left:-1px;z-index:1}.gs-cell.gs-choosing.gs-editing{color:transparent}.gs-cell.gs-choosing .gs-cell-label{display:block}.gs-cell .gs-formula-error-triangle{position:absolute;top:0;right:0;border-top:3px solid rgba(200,0,0,.9);border-right:3px solid rgba(200,0,0,.9);border-bottom:3px solid transparent;border-left:3px solid transparent;z-index:1}.gs-cell .gs-cell-label{font-size:8px;font-weight:400;font-style:normal;font-family:math,monospace,serif;letter-spacing:1px;line-height:14px;position:absolute;top:0;right:0;background-color:rgba(0,128,255,.2);color:rgba(255,255,255,.6);padding:0 2px;display:none;opacity:.7}.gs-cell .gs-cell-inner-wrap{width:100%;height:100%;position:absolute;top:0;left:0}.gs-cell .gs-cell-inner{width:100%;height:100%;overflow:hidden;display:flex;box-sizing:border-box;border:none!important}.gs-cell .gs-cell-rendered{overflow:hidden;white-space:pre-wrap;cursor:cell;word-wrap:break-word;word-break:break-all;padding:0 2px;width:100%;height:100%}.gs-cell .gs-cell-rendered>*{position:relative}.gs-cell .gs-cell-rendered>.backface{z-index:0}.gs-cell .gs-autofill-drag{background-color:#07f;position:absolute;width:7px;height:7px;bottom:0;right:0;margin-right:-3.5px;margin-bottom:-3.5px;cursor:crosshair;z-index:1}.gs-th[data-x=\"1\"] .gs-th-inner-wrap{border-left:none}.gs-th[data-y=\"1\"] .gs-th-inner-wrap{border-top:none}.gs-cell[data-x=\"1\"]{border-left:none}.gs-cell[data-y=\"1\"]{border-top:none}.gs-contextmenu-modal{width:100%;height:100vh;z-index:3}.gs-contextmenu{z-index:3;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px}.gs-contextmenu ul{min-width:250px;color:#555;margin:0;padding:0}.gs-contextmenu li{padding:5px 10px;list-style-type:none;display:flex}.gs-contextmenu li.gs-enabled{cursor:pointer}.gs-contextmenu li.gs-enabled:hover{background-color:#eee}.gs-contextmenu li.gs-disabled{opacity:.5;cursor:not-allowed}.gs-contextmenu li.gs-menu-divider{background-color:#aaa;margin:10px 0;padding:0;height:1px}.gs-contextmenu li .gs-menu-name{flex:1;font-size:15px;letter-spacing:1px}.gs-contextmenu li .gs-menu-shortcut{font-size:10px;line-height:20px;color:#999}.gs-contextmenu li .gs-menu-shortcut:before{content:\"( \"}.gs-contextmenu li .gs-menu-shortcut:after{content:\" )\"}.gs-contextmenu li .gs-menu-shortcut .gs-menu-underline{text-decoration:underline}.gs-editor-hl{padding:0 2px!important;position:absolute;font-family:monospace,Arial;font-size:12px;line-height:24px;letter-spacing:1px}.gs-formula-bar-editor-inner{position:relative;display:table-cell}.gs-editor{opacity:0;z-index:-1}.gs-editor .gs-editor-inner{position:relative}.gs-editor .gs-editor-hl{box-sizing:content-box;border:solid 2px #07f;margin:-2px -1px}.gs-editor textarea{width:100%;padding:0 2px!important;position:absolute;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;top:0;left:0;border:none;outline:0;background-color:transparent;color:transparent;resize:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;cursor:default;white-space:pre;height:auto}.gs-editor.gs-editing{z-index:11;opacity:1}.gs-editor.gs-editing .gs-cell-label{pointer-events:none;font-family:math,monospace,serif;position:absolute;top:0;right:0;margin-top:-15px;margin-right:-2px;padding:0 2px;font-size:10px;background-color:rgba(0,119,255,.75);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:table;align-items:center;justify-content:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box}.gs-formula-bar .gs-selecting-address{display:table-cell;vertical-align:middle;width:60px;color:rgba(200,200,200);font-size:13px;text-align:center}.gs-formula-bar .gs-fx{display:table-cell;vertical-align:middle;width:30px;color:rgba(200,200,200);font-style:italic;font-family:cursive;text-align:center;border-left:solid 1px rgba(128,128,128,.5);font-size:15px}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all}.gs-formula-bar textarea{position:relative;z-index:1;width:100%;vertical-align:bottom;color:transparent;border:none;background-color:transparent;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;resize:vertical;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all}.gs-token-type-INVALID_REF{color:red}.gs-token-type-VALUE.gs-token-entity-type-boolean,.gs-token-type-VALUE.gs-token-entity-type-number{color:#39f}.gs-token-type-VALUE.gs-token-entity-type-string{color:#090}.gs-editor-options{padding:0;box-shadow:0 2px 8px rgba(0,0,0,.25);border:1px solid rgba(128,128,128,.2);border-radius:4px}.gs-editor-option{cursor:pointer;list-style:none;padding:5px;font-size:12px}.gs-editor-option:hover{background-color:rgba(128,128,128,.1)}.gs-editor-option-selected{background-color:rgba(128,128,128,.2)}.gs-adjuster{padding:0}.gs-table{margin:0}.gs-tabular{overflow:auto;display:block;box-sizing:border-box;overscroll-behavior:none;position:relative}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-th{z-index:2;padding:0;position:sticky;font-size:13px;font-weight:400;box-sizing:border-box;vertical-align:top}.gs-th .gs-resizer{position:absolute;border-color:transparent;box-sizing:border-box;z-index:2}.gs-th .gs-resizer:hover{background-color:#07f}.gs-th .gs-resizer.gs-protected{display:none}.gs-th-inner{height:100%;box-sizing:border-box;vertical-align:middle;overflow:hidden;display:flex;align-items:center;justify-content:center}.gs-th-inner-wrap{height:100%;box-sizing:border-box;background-color:transparent}.gs-th-top{top:0;overflow:hidden}.gs-th-top .gs-resizer{top:0;right:0;width:3px;cursor:e-resize}.gs-th-top .gs-resizer.gs-dragging{border-right-style:dotted;height:1000000px!important;cursor:e-resize}.gs-th-left{left:0;overflow:hidden;min-width:30px;border-top:solid 1px #ddd}.gs-th-left .gs-resizer{left:0;bottom:0;height:3px;cursor:n-resize}.gs-th-left .gs-resizer.gs-dragging{border-bottom-style:dotted;width:1000000px!important;cursor:n-resize}.gs-th-top.gs-th-left{top:0;left:0;z-index:3;border:none!important}.gs-search-bar{width:100%;display:table;align-items:center;justify-content:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box;background-color:rgba(200,50,0,.2)}.gs-search-bar.gs-search-found{background-color:rgba(0,200,100,.2)}.gs-search-bar .gs-search-bar-inner{vertical-align:middle;border-left:solid 1px rgba(128,128,128,.5)}.gs-search-bar .gs-search-bar-icon{border-left:solid 1px rgba(128,128,128,.3);display:table-cell;vertical-align:middle;width:30px}.gs-search-bar textarea{background-color:transparent;border:none;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all;display:table-cell;vertical-align:middle;width:100%;resize:none}.gs-search-progress{display:table-cell;color:#999;font-size:13px;width:60px;vertical-align:middle;white-space:nowrap;text-align:center}.gs-search-close{display:table-cell;cursor:pointer;vertical-align:middle;width:24px}.gs-search-casesensitive{display:table-cell;cursor:pointer;vertical-align:middle;width:30px}.gs-search-casesensitive span{font-size:14px;padding:0 3px}.gs-search-casesensitive span.gs-search-casesensitive-on{color:#07f;background-color:rgba(200,200,255,.5);border-radius:3px}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}`;\n","import { CSS, LAST_MODIFIED } from './minified';\n\nexport const embedStyle = () => {\n if (typeof window === 'undefined') {\n return;\n }\n const exists = document.querySelector(`style.gs-styling[data-modified-at='${LAST_MODIFIED}']`);\n if (exists) {\n return;\n }\n const style = document.createElement('style');\n document.head.appendChild(style);\n style.setAttribute('class', 'gs-styling');\n style.setAttribute('data-modified-at', `${LAST_MODIFIED}`);\n style.innerText = CSS;\n};\n","import type { KeyboardEvent } from 'react';\nimport { useContext, useEffect, useState, useRef, useCallback } from 'react';\nimport { Context } from '../store';\nimport { p2a } from '../lib/converters';\nimport { setEditingAddress, setInputting, walk, write } from '../store/actions';\nimport * as prevention from '../lib/operation';\nimport { insertTextAtCursor } from '../lib/input';\nimport { editorStyle } from './Editor';\nimport { ScrollHandle } from './ScrollHandle';\n\ntype FormulaBarProps = {\n ready: boolean;\n};\n\nexport const FormulaBar = ({ ready }: FormulaBarProps) => {\n const { store, dispatch } = useContext(Context);\n const [before, setBefore] = useState('');\n const {\n choosing,\n editorRef,\n largeEditorRef,\n tableReactive: tableRef,\n inputting,\n editingAddress: editingCell,\n } = store;\n const table = tableRef.current;\n const hlRef = useRef<HTMLDivElement | null>(null);\n\n const address = choosing.x === -1 ? '' : p2a(choosing);\n const cell = table?.getCellByPoint(choosing, 'SYSTEM');\n useEffect(() => {\n if (!table) {\n return;\n }\n let value = table.getCellByPoint(choosing, 'SYSTEM')?.value ?? '';\n // debug to remove this line\n value = table.stringify({ point: choosing, cell: { ...cell, value }, refEvaluation: 'RAW' });\n largeEditorRef.current!.value = value;\n setBefore(value as string);\n }, [address, table]);\n\n const writeCell = useCallback(\n (value: string) => {\n if (before !== value) {\n dispatch(write({ value }));\n }\n dispatch(setEditingAddress(''));\n editorRef.current!.focus();\n },\n [before],\n );\n\n useEffect(() => {\n const observer = new ResizeObserver((entries) => {\n entries.forEach(updateScroll);\n });\n if (largeEditorRef.current) {\n observer.observe(largeEditorRef.current);\n }\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const largeInput = largeEditorRef.current;\n\n const handleInput = useCallback((e: KeyboardEvent<HTMLTextAreaElement>) => {\n dispatch(setInputting(e.currentTarget.value));\n }, []);\n\n const updateScroll = useCallback(() => {\n if (!hlRef.current || !largeEditorRef.current) {\n return;\n }\n hlRef.current.style.height = `${largeEditorRef.current.clientHeight}px`;\n hlRef.current.scrollLeft = largeEditorRef.current.scrollLeft;\n hlRef.current.scrollTop = largeEditorRef.current.scrollTop;\n }, []);\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n if (!largeInput || !table) {\n return;\n }\n dispatch(setEditingAddress(address));\n table.wire.lastFocused = e.currentTarget;\n },\n [largeInput, address, table],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n if (e.currentTarget.value!.startsWith('=')) {\n return true;\n } else {\n if (editingCell) {\n writeCell(e.currentTarget.value);\n }\n }\n },\n [editingCell, writeCell],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.ctrlKey || !table) {\n return true;\n }\n const input = e.currentTarget;\n\n switch (e.key) {\n case 'Enter': {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n } else {\n writeCell(input.value);\n dispatch(setInputting(''));\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n }\n break;\n }\n case 'Escape': {\n input.value = before;\n dispatch(setInputting(before));\n dispatch(setEditingAddress(''));\n e.preventDefault();\n editorRef.current!.focus();\n\n break;\n }\n case 'a': // A\n if (e.ctrlKey || e.metaKey) {\n return true;\n }\n case 'c': // C\n if (e.ctrlKey || e.metaKey) {\n return true;\n }\n break;\n case 'v': // V\n if (e.ctrlKey || e.metaKey) {\n return true;\n }\n break;\n }\n\n const cell = table.getCellByPoint(choosing, 'SYSTEM');\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n e.preventDefault();\n }\n updateScroll();\n return false;\n },\n [table, choosing, before, writeCell, updateScroll],\n );\n\n const style: React.CSSProperties = ready ? {} : { visibility: 'hidden' };\n if (!table) {\n return (\n <label className=\"gs-formula-bar gs-hidden\" style={style}>\n <div className=\"gs-selecting-address\"></div>\n <div className=\"gs-fx\">Fx</div>\n <div className=\"gs-formula-bar-editor-inner\">\n <textarea />\n </div>\n </label>\n );\n }\n return (\n <label className=\"gs-formula-bar\" data-sheet-id={store.sheetId} style={style}>\n <ScrollHandle style={{ position: 'absolute', left: 0, top: 0, zIndex: 2 }} vertical={-1} />\n <div className=\"gs-selecting-address\">{address}</div>\n <div className=\"gs-fx\">Fx</div>\n <div className=\"gs-formula-bar-editor-inner\">\n <div\n className=\"gs-editor-hl\"\n ref={hlRef}\n style={{\n height: largeEditorRef.current?.clientHeight,\n width: '100%',\n }}\n >\n {cell?.disableFormula ? inputting : editorStyle(inputting)}\n </div>\n <textarea\n name=\"gs-formula-bar-editor\"\n data-sheet-id={store.sheetId}\n data-size=\"large\"\n rows={1}\n spellCheck={false}\n ref={largeEditorRef}\n value={inputting}\n onInput={handleInput}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onKeyUp={updateScroll}\n onScroll={updateScroll}\n ></textarea>\n </div>\n </label>\n );\n};\n","import type { ReactNode, CSSProperties } from 'react';\n\nexport interface IconProps {\n style?: CSSProperties;\n color?: string;\n size?: number;\n}\n\ninterface BaseProps extends IconProps {\n children?: ReactNode;\n}\n\n// https://tabler.io/icons\n\nexport const Base = ({ style, size = 24, children }: BaseProps) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox={`0 0 24 24`}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={style}\n className=\"icon-tabler\"\n >\n {children}\n </svg>\n );\n};\n","import { type IconProps, Base } from './Base';\n\n// https://tabler.io/icons\n\nexport const SearchIcon = ({ style, color = 'none', size = 24 }: IconProps) => {\n return (\n <Base style={style} size={size}>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill={color} />\n <path d=\"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0\" fill={color} />\n <path d=\"M21 21l-6 -6\" fill={color} />\n </Base>\n );\n};\n","import { type IconProps, Base } from './Base';\n\n// https://tabler.io/icons\n\nexport const CloseIcon = ({ style, color = 'none', size = 24 }: IconProps) => {\n return (\n <Base style={style} size={size}>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill={color} />\n <path d=\"M18 6l-12 12\" fill={color} />\n <path d=\"M6 6l12 12\" fill={color} />\n </Base>\n );\n};\n","import { useContext, useEffect, useRef, useCallback } from 'react';\n\nimport { a2p } from '../lib/converters';\n\nimport { Context } from '../store';\nimport { setSearchQuery, search, setSearchCaseSensitive } from '../store/actions';\nimport { smartScroll } from '../lib/virtualization';\nimport { SearchIcon } from './svg/SearchIcon';\nimport { CloseIcon } from './svg/CloseIcon';\n\nexport const SearchBar = () => {\n const { store, dispatch } = useContext(Context);\n const {\n rootRef,\n editorRef,\n searchInputRef,\n tabularRef,\n searchQuery,\n searchCaseSensitive,\n matchingCellIndex,\n matchingCells,\n tableReactive: tableRef,\n } = store;\n const table = tableRef.current;\n\n const matchingCell = matchingCells[matchingCellIndex];\n useEffect(() => {\n if (!matchingCell || !table) {\n return;\n }\n const point = a2p(matchingCell);\n if (typeof point === 'undefined') {\n return;\n }\n smartScroll(table, tabularRef.current, point);\n }, [searchQuery, matchingCellIndex, searchCaseSensitive, table, tabularRef]);\n\n const handleProgressClick = useCallback((e: React.MouseEvent) => {\n const input = e.currentTarget.previousSibling as HTMLInputElement;\n input?.nodeName === 'INPUT' && input.focus();\n }, []);\n\n const handleSearchClick = useCallback(() => {\n dispatch(search(1));\n }, []);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n dispatch(setSearchQuery(e.currentTarget.value));\n }, []);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Escape') {\n const el = editorRef?.current;\n if (el) {\n el.focus();\n }\n dispatch(setSearchQuery(undefined));\n }\n if (e.key === 'f' && (e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n return false;\n }\n if (e.key === 'Enter') {\n dispatch(search(e.shiftKey ? -1 : 1));\n e.preventDefault();\n return false;\n }\n return true;\n },\n [editorRef],\n );\n\n const handleCaseSensitiveClick = useCallback(() => {\n dispatch(setSearchCaseSensitive(!searchCaseSensitive));\n }, [searchCaseSensitive]);\n\n const handleCloseClick = useCallback(() => {\n dispatch(setSearchQuery(undefined));\n editorRef.current?.focus();\n }, [editorRef]);\n\n if (typeof searchQuery === 'undefined') {\n return null;\n }\n if (rootRef.current === null) {\n return null;\n }\n return (\n <label className={`gs-search-bar ${matchingCells.length > 0 ? 'gs-search-found' : ''}`}>\n <div className=\"gs-search-progress\" onClick={handleProgressClick}>\n {matchingCells.length === 0 ? 0 : matchingCellIndex + 1} / {matchingCells.length}\n </div>\n <div className=\"gs-search-bar-icon\" onClick={handleSearchClick}>\n <SearchIcon style={{ verticalAlign: 'middle', marginLeft: '5px' }} />\n </div>\n <textarea ref={searchInputRef} value={searchQuery} onChange={handleChange} onKeyDown={handleKeyDown}></textarea>\n <div className={`gs-search-casesensitive`}>\n <span\n className={`${searchCaseSensitive ? 'gs-search-casesensitive-on' : ''}`}\n onClick={handleCaseSensitiveClick}\n >\n Aa\n </span>\n </div>\n <a className=\"gs-search-close\" onClick={handleCloseClick}>\n <CloseIcon style={{ verticalAlign: 'middle' }} />\n </a>\n </label>\n );\n};\n","import { useEffect, useState, useRef, useReducer, createRef } from 'react';\nimport type { CellsByAddressType, Connector, OptionsType, Props, StoreType } from '../types';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, HEADER_HEIGHT, HEADER_WIDTH, SHEET_HEIGHT, SHEET_WIDTH } from '../constants';\nimport { Context } from '../store';\nimport { reducer as defaultReducer } from '../store/actions';\nimport { Editor } from './Editor';\nimport { StoreObserver } from './StoreObserver';\nimport { Resizer } from './Resizer';\nimport { Emitter } from './Emitter';\nimport { ContextMenu, defaultContextMenuItems } from './ContextMenu';\nimport { Table } from '../lib/table';\nimport { Tabular } from './Tabular';\nimport { getMaxSizesFromCells } from '../lib/structs';\nimport { x2c, y2r } from '../lib/converters';\nimport { embedStyle } from '../styles/embedder';\nimport { FormulaBar } from './FormulaBar';\nimport { SearchBar } from './SearchBar';\nimport { useHub } from '../lib/hub';\nimport { ScrollHandle } from './ScrollHandle';\n\nexport const createConnector = () => createRef<Connector | null>();\nexport const useConnector = () => useRef<Connector | null>(null);\n\nexport function GridSheet({\n initialCells,\n sheetName = '',\n connector: initialConnector,\n options = {},\n className,\n style,\n hub: initialHub,\n}: Props) {\n const { sheetResize, showFormulaBar = true, mode = 'light' } = options;\n const rootRef = useRef<HTMLDivElement>(null);\n const mainRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLTextAreaElement>(null);\n const editorRef = useRef<HTMLTextAreaElement>(null);\n const largeEditorRef = useRef<HTMLTextAreaElement>(null);\n const tabularRef = useRef<HTMLDivElement>(null);\n\n const internalConnector = useConnector();\n const connector = initialConnector ?? internalConnector;\n\n const internalHub = useHub({});\n const hub = initialHub ?? internalHub;\n const { wire } = hub;\n\n // useRef to manage sheetId and avoid Strict Mode issues\n const sheetIdRef = useRef<number | null>(null);\n if (sheetIdRef.current === null) {\n sheetIdRef.current = ++wire.sheetHead;\n }\n const sheetId = sheetIdRef.current;\n\n // Initialize tableReactive\n const tableReactive = useRef<Table | null>(null);\n\n const [initialState] = useState<StoreType>(() => {\n if (!sheetName) {\n sheetName = `Sheet${sheetId}`;\n console.debug('GridSheet: sheetName is not provided, using default name:', sheetName);\n }\n const { minNumRows, maxNumRows, minNumCols, maxNumCols, contextMenuItems } = options;\n const table = new Table({\n minNumRows,\n maxNumRows,\n minNumCols,\n maxNumCols,\n sheetName,\n hub: wire,\n });\n table.sheetId = sheetId;\n wire.sheetIdsByName[sheetName] = sheetId;\n\n table.initialize(initialCells);\n wire.onInit?.({ table });\n\n table.setTotalSize();\n tableReactive.current = table;\n\n const store: StoreType = {\n sheetId,\n tableReactive,\n rootRef,\n mainRef,\n searchInputRef,\n editorRef,\n largeEditorRef,\n tabularRef,\n choosing: { y: 1, x: 1 },\n inputting: '',\n selectingZone: { startY: 1, startX: 1, endY: -1, endX: -1 },\n autofillDraggingTo: null,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n editingAddress: '',\n editorRect: { y: 0, x: 0, height: 0, width: 0 },\n dragging: false,\n sheetHeight: 0,\n sheetWidth: 0,\n entering: false,\n matchingCells: [],\n matchingCellIndex: 0,\n searchCaseSensitive: false,\n editingOnEnter: true,\n showAddress: true,\n contextMenuPosition: { y: -1, x: -1 },\n contextMenuItems: contextMenuItems ?? defaultContextMenuItems,\n resizingPositionY: [-1, -1, -1],\n resizingPositionX: [-1, -1, -1],\n minNumRows: 1,\n maxNumRows: -1,\n minNumCols: 1,\n maxNumCols: -1,\n mode: 'light',\n };\n return store;\n });\n\n type ReducerWithoutAction<S> = (prevState: S) => S;\n\n const [store, dispatch] = useReducer(\n defaultReducer as unknown as ReducerWithoutAction<StoreType>,\n initialState,\n () => initialState,\n );\n\n useEffect(() => {\n embedStyle();\n }, []);\n\n const [sheetHeight, setSheetHeight] = useState(options?.sheetHeight || estimateSheetHeight(initialCells));\n const [sheetWidth, setSheetWidth] = useState(options?.sheetWidth || estimateSheetWidth(initialCells));\n useEffect(() => {\n const intervalId = window.setInterval(() => {\n setSheetHeight(mainRef.current?.clientHeight || 0);\n setSheetWidth(mainRef.current?.clientWidth || 0);\n }, 1000);\n return () => window.clearInterval(intervalId);\n }, []);\n useEffect(() => {\n if (options.sheetHeight) {\n setSheetHeight(options.sheetHeight);\n }\n }, [options.sheetHeight]);\n useEffect(() => {\n if (options.sheetWidth) {\n setSheetWidth(options.sheetWidth);\n }\n }, [options.sheetWidth]);\n\n return (\n <Context.Provider value={{ store, dispatch }}>\n <div\n className={`gs-root1 ${wire.ready ? 'gs-initialized' : ''}`}\n ref={rootRef}\n data-sheet-name={sheetName}\n data-mode={mode}\n >\n <ScrollHandle style={{ position: 'fixed', top: 0, left: 0 }} />\n <ScrollHandle style={{ position: 'absolute', zIndex: 4, right: 0, top: 0, width: 5 }} horizontal={1} />\n <ScrollHandle style={{ position: 'absolute', zIndex: 4, left: 0, bottom: 0, height: 5 }} vertical={1} />\n\n {typeof store.searchQuery === 'undefined' ? showFormulaBar && <FormulaBar ready={wire.ready} /> : <SearchBar />}\n <div\n className={`gs-main ${className || ''}`}\n ref={mainRef}\n style={{\n //width: '100%',\n maxWidth: (store.tableReactive.current?.totalWidth || 0) + 2,\n maxHeight: (store.tableReactive.current?.totalHeight || 0) + 2,\n overflow: 'auto',\n resize: sheetResize,\n ...style,\n }}\n >\n <Editor mode={mode} />\n <Tabular />\n <StoreObserver {...{ ...options, sheetHeight, sheetWidth, sheetName, connector }} />\n <ContextMenu />\n <Resizer />\n <Emitter />\n </div>\n </div>\n </Context.Provider>\n );\n}\n\nconst estimateSheetHeight = (initialCells: CellsByAddressType) => {\n const auto = getMaxSizesFromCells(initialCells);\n let estimatedHeight = initialCells[0]?.height ?? HEADER_HEIGHT;\n for (let y = 0; y < auto.numRows; y++) {\n const row = y2r(y);\n const height = initialCells?.[row]?.height || initialCells?.default?.height || DEFAULT_HEIGHT;\n if (estimatedHeight + height > SHEET_HEIGHT) {\n return SHEET_HEIGHT;\n }\n estimatedHeight += height;\n }\n return estimatedHeight + 3;\n};\n\nconst estimateSheetWidth = (initialCells: CellsByAddressType) => {\n const auto = getMaxSizesFromCells(initialCells);\n let estimatedWidth = initialCells[0]?.width ?? HEADER_WIDTH;\n for (let x = 0; x < auto.numCols; x++) {\n const col = x2c(x);\n const width = initialCells?.[col]?.width || initialCells?.default?.width || DEFAULT_WIDTH;\n if (estimatedWidth + width > SHEET_WIDTH) {\n return SHEET_WIDTH;\n }\n estimatedWidth += width;\n }\n return estimatedWidth + 3;\n};\n","import { RendererMixinType } from './core';\n\nexport const ThousandSeparatorRendererMixin: RendererMixinType = {\n number({ value, cell }): any {\n if (value == null || isNaN(value)) {\n return 'NaN';\n }\n const [int, fraction] = String(value).split('.');\n const result = int.replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,');\n if (fraction == null) {\n return result;\n }\n return `${result}.${fraction}`;\n },\n};\n","import { RenderProps } from './core';\n\nexport const CheckboxRendererMixin = {\n bool({ value, sync, table, point }: RenderProps<boolean>): any {\n return (\n <input\n type=\"checkbox\"\n checked={value}\n onChange={(e) => {\n if (sync) {\n sync(table.write({ point, value: e.currentTarget.checked.toString() }));\n }\n e.currentTarget.blur();\n }}\n />\n );\n },\n};\n","import { CSSProperties } from 'react';\n\ntype BorderStyleValue = string;\n\ninterface BorderOptions {\n /**\n * Border CSS value to apply uniformly to all sides.\n * Individual sides (top, right, etc.) will override this if specified.\n *\n * Example: \"1px solid #000\"\n */\n all?: BorderStyleValue;\n\n /**\n * Border CSS value for the top side.\n *\n * Example: \"2px dashed red\"\n */\n top?: BorderStyleValue;\n\n /**\n * Border CSS value for the right side.\n */\n right?: BorderStyleValue;\n\n /**\n * Border CSS value for the bottom side.\n */\n bottom?: BorderStyleValue;\n\n /**\n * Border CSS value for the left side.\n */\n left?: BorderStyleValue;\n}\n\n/**\n * Generates a CSSProperties object with individual border styles.\n *\n * - If `all` is provided, it applies the same border style to all sides.\n * - If individual sides (top, right, bottom, left) are specified, they override `all`.\n * - Sides that are not specified will be omitted from the result,\n * which avoids unintentionally removing existing border styles during re-renders.\n * - The function does not output the shorthand `border` property, only individual sides.\n *\n * @param options Border configuration options.\n * @returns CSSProperties object with border styles.\n *\n * @example\n * makeBorder({ all: \"1px solid #000\" });\n * // → { borderTop: \"1px solid #000\", borderRight: \"1px solid #000\", borderBottom: \"1px solid #000\", borderLeft: \"1px solid #000\" }\n *\n * @example\n * makeBorder({ top: \"2px dashed red\", left: \"1px solid blue\" });\n * // → { borderTop: \"2px dashed red\", borderLeft: \"1px solid blue\" }\n */\nexport function makeBorder(options: BorderOptions): CSSProperties {\n const result: CSSProperties = {};\n\n const all = options.all;\n\n if (options.top ?? all) {\n result.borderTop = options.top ?? all;\n }\n\n if (options.right ?? all) {\n result.borderRight = options.right ?? all;\n }\n\n if (options.bottom ?? all) {\n result.borderBottom = options.bottom ?? all;\n }\n\n if (options.left ?? all) {\n result.borderLeft = options.left ?? all;\n }\n\n return result;\n}\n"],"names":["range","startRow","endRow","operation","operations","this","t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h","BOOLS","buf","eq","group","tableRef","nextSelectingZone","newTable","prevention.hasOperation","prevention.Write","nextY","nextX","_a","document","currentLine","_b","selected","shiftKey","_c","setStore","table","store","x","endY","height","endX","width","prevention.InsertRowsAbove","prevention.InsertRowsBelow","prevention.InsertColsLeft","prevention.InsertColsRight","prevention.RemoveRows","prevention.RemoveCols","Parser","num","functionsDefault","address","operation.hasOperation","operation.MoveFrom","operation.MoveTo","operation.Copy","operation.Update","operation.Write","operation.Style","operation.Resize","operation.SetRenderer","operation.SetParser","point","operation.RemoveRows","operation.RemoveCols","prevention.Resize","palette","cell","defaultReducer"],"mappings":";;;AAEO,MAAM,wBAAwB;AAE9B,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AAEtB,MAAM,eAAe;AACrB,MAAM,cAAc;AAEpB,MAAM,gBAAgB;AACtB,MAAM,eAAe;AAErB,MAAM,YAAY;AAClB,MAAM,aAAa;AAEnB,MAAM,aAAa;AACnB,MAAM,aAAa;AAEnB,MAAM,8BAA8B;AAEpC,MAAM,QAAQ;AAAA,EAEnB,YAAY,MAAc;AACxB,SAAK,OAAO;AAAA,EAAA;AAEhB;AAEO,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAE5B,MAAM,aAAuB;AAAA,EAClC,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AACR;AC5BO,MAAM,UAAU;AAAA,EACrB,CAAA;AAIF;ACVA,MAAM,WAAW;AAEjB,MAAM,gCAAgB,IAAoB;AAC1C,MAAM,gCAAgB,IAAoB;AAE1C,MAAM,4BAA4B,CAAC,KAAa,YAAY,gCAAwC;AAClG,QAAM,SAAS,UAAU,IAAI,EAAE,GAAG;AAClC,MAAI,UAAU,MAAM;AACX,WAAA;AAAA,EAAA;AAET,MAAI,QAAQ,GAAG;AACN,WAAA;AAAA,EAAA;AAET,MAAI,MAAM;AACV,MAAI,SAAS;AACV,KAAA;AACD,aAAS,SAAS,EAAE,MAAM,EAAE,IAAI;AAC1B,UAAA,KAAK,MAAM,MAAM,EAAE;AAAA,WAClB,MAAM;AAEL,YAAA,IAAI,KAAK,MAAM;AACnB,QAAA,KAAK,UAAU,KAAK;AACjB,WAAA,KAAK,GAAG,QAAQ,UAAU,OAAO,WAAW,KAAK,GAAG,KAAA,GAAQ;AAEzD,cAAA,OAAO,GAAG,KAAK;AAAA,EAAA;AAEpB,SAAA;AACT;AAEA,MAAM,4BAA4B,CAAC,KAAa,YAAY,gCAAwC;AAC5F,QAAA,SAAS,UAAU,IAAI,GAAG;AAChC,MAAI,UAAU,MAAM;AACX,WAAA;AAAA,EAAA;AAET,MAAI,QAAQ,IAAI;AACP,WAAA;AAAA,EAAA;AAET,QAAM,QAAQ;AACd,MAAI,SAAS;AACb,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;AACjD,UAAM,IAAI,MAAM,MAAM,SAAS,QAAQ,CAAC;AACxC,UAAM,MAAM,SAAS,QAAQ,CAAC,IAAI;AACxB,cAAA,SAAS,UAAU,QAAQ;AAAA,EAAA;AAE7B,YAAA,IAAI,KAAK,MAAM;AACnB,QAAA,KAAK,UAAU,KAAK;AACjB,WAAA,KAAK,GAAG,QAAQ,UAAU,OAAO,WAAW,KAAK,GAAG,KAAA,GAAQ;AAEzD,cAAA,OAAO,GAAG,KAAK;AAAA,EAAA;AAEpB,SAAA;AACT;AAEa,MAAA,MAAM,CAAC,MAAsB;AACxC,MAAI,MAAM,GAAG;AACJ,WAAA;AAAA,EAAA;AAEH,QAAA,IAAI,0BAA0B,IAAI,CAAC;AACzC,SAAO,IAAI,IAAI,IAAI,CAAC,KAAK;AAC3B;AAEO,MAAM,MAAM,CAAC,KAAa,WAAW,UAAkB;AACtD,QAAA,IAAI,0BAA0B,GAAG;AAChC,SAAA,WAAW,CAAC,IAAI;AACzB;AAEa,MAAA,MAAM,CAAC,MAAc;AAChC,MAAI,MAAM,GAAG;AACJ,WAAA;AAAA,EAAA;AAET,SAAO,IAAI,IAAI,IAAI,CAAC,KAAK,OAAO,CAAC;AACnC;AAEO,MAAM,MAAM,CAAC,KAAsB,WAAW,UAAU;AACzD,MAAA,OAAO,QAAQ,UAAU;AACrB,UAAA,SAAS,KAAK,EAAE;AAAA,EAAA;AAEjB,SAAA,WAAW,CAAC,MAAM;AAC3B;AAEO,MAAM,MAAM,CAAC,EAAE,GAAG,GAAG,MAAM,WAA2B;AACvD,MAAA,MAAM,KAAK,MAAM,GAAG;AACf,WAAA;AAAA,EAAA;AAEL,MAAA,MAAM,MAAM,MAAM,IAAI;AACjB,WAAA;AAAA,EAAA;AAET,SAAO,GAAG,OAAO,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AAC/D;AAEa,MAAA,MAAM,CAAC,YAAqC;AACjD,QAAA,IAAI,QAAQ,MAAM,4BAA4B;AACpD,MAAI,KAAK,MAAM;AACL,YAAA,MAAM,mBAAmB,OAAO;AACxC,WAAO,EAAE,GAAG,IAAI,GAAG,GAAG;AAAA,EAAA;AAElB,QAAA,CAAA,EAAG,OAAO,KAAK,OAAO,GAAG,IAAI,EAAE,MAAM;AACrC,QAAA,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,MAAM,SAAS,IAAI;AAC9C,MAAA,QAAQ,MAAM,QAAQ,IAAI;AACrB,WAAA,EAAE,GAAG,IAAI,GAAG,IAAI,MAAM,OAAO,MAAM,MAAM;AAAA,EAAA;AAElD,SAAO,EAAE,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,KAAK;AAC1D;AAEO,MAAM,uBAAuB,CAAC,SAAkB,QAAiB,WAAoB;AACpF,QAAA,IAAI,QAAQ,MAAM,kBAAkB;AAC1C,MAAI,KAAK,MAAM;AACb;AAAA,EAAA;AAEF,QAAM,CAAG,EAAA,KAAK,GAAG,IAAI,EAAE,MAAM;AACtB,SAAA,GAAG,SAAS,MAAM,EAAE,GAAG,GAAG,GAAG,SAAS,MAAM,EAAE,GAAG,GAAG;AAC7D;AAEa,MAAA,uBAAuB,CAAC,YAAqB;AACjD,SAAA,QAAQ,QAAQ,OAAO,EAAE;AAClC;ACjGa,MAAA,gBAAgB,CAAC,SAAmB,YAAiC;AAChF,QAAM,EAAE,QAAQ,WAAW,OAAO,SAAS,IAAI,UAAU,OAAO;AAChE,QAAM,EAAE,QAAQ,WAAW,OAAO,SAAS,IAAI,UAAU,OAAO;AAGzD,SAAA;AAAA,IACL,QAAQ,YAAY,YAAY,YAAY;AAAA,IAC5C,OAAO,WAAW,WAAW,WAAW;AAAA,EAC1C;AACF;AAEa,MAAA,cAAc,CAAC,OAAiB,UAA8B;AACnE,QAAA,SAAmB,EAAE,GAAG,MAAM;AAChC,MAAA,MAAM,OAAO,MAAM,MAAM;AAC3B,WAAO,OAAO,MAAM;AAAA,EAAA;AAElB,MAAA,MAAM,QAAQ,MAAM,OAAO;AAC7B,WAAO,QAAQ,MAAM;AAAA,EAAA;AAEnB,MAAA,MAAM,MAAM,MAAM,KAAK;AACzB,WAAO,MAAM,MAAM;AAAA,EAAA;AAEjB,MAAA,MAAM,SAAS,MAAM,QAAQ;AAC/B,WAAO,SAAS,MAAM;AAAA,EAAA;AAEjB,SAAA;AACT;AAEa,MAAA,aAAa,CAAC,SAA6B;AACtD,MAAI,KAAK,SAAS,MAAM,KAAK,SAAS,IAAI;AACjC,WAAA,EAAE,KAAK,IAAI,MAAM,IAAI,QAAQ,IAAI,OAAO,GAAG;AAAA,EAAA;AAEpD,QAAM,CAAC,KAAK,MAAM,IAAI,KAAK,SAAS,KAAK,OAAO,CAAC,KAAK,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,KAAK,MAAM;AAClG,QAAM,CAAC,MAAM,KAAK,IAAI,KAAK,SAAS,KAAK,OAAO,CAAC,KAAK,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,KAAK,MAAM;AAClG,SAAO,EAAE,KAAK,MAAM,QAAQ,MAAM;AACpC;AAEa,MAAA,aAAa,CAAC,SAA6B;AAC/C,SAAA;AAAA,IACL,QAAQ,KAAK;AAAA,IACb,QAAQ,KAAK;AAAA,IACb,MAAM,KAAK;AAAA,IACX,MAAM,KAAK;AAAA,EACb;AACF;AAEa,MAAA,cAAc,CAAC,SAA2B;AACrD,QAAM,EAAE,KAAK,MAAM,QAAQ,MAAU,IAAA;AACjC,MAAA,QAAQ,UAAU,SAAS,OAAO;AACpC,WAAO,IAAI,EAAE,GAAG,KAAK,GAAG,MAAM;AAAA,EAAA;AAEhC,QAAM,UAAU,IAAI,EAAE,GAAG,KAAK,GAAG,MAAM;AACvC,QAAM,cAAc,IAAI,EAAE,GAAG,QAAQ,GAAG,OAAO;AACxC,SAAA,GAAG,OAAO,IAAI,WAAW;AAClC;AAEa,MAAA,UAAU,CAACA,QAAkB,UAAkB;AAC1D,MAAIA,OAAM,UAAU,MAAMA,OAAM,QAAQ,IAAI;AACnC,WAAA;AAAA,EAAA;AAEDA,SAAAA,OAAM,SAAS,SAAS,SAASA,OAAM,OAASA,OAAM,OAAO,SAAS,SAASA,OAAM;AAC/F;AAEa,MAAA,QAAQ,CAAC,MAAgB,UAAqB;AACrD,MAAA,KAAK,QAAQ,MAAM,KAAK,SAAS,MAAM,KAAK,WAAW,MAAM,KAAK,UAAU,IAAI;AAC3E,WAAA;AAAA,EAAA;AAEH,QAAA,EAAE,GAAG,EAAA,IAAM;AACjB,QAAM,EAAE,KAAK,MAAM,QAAQ,MAAU,IAAA;AACrC,SAAO,OAAO,KAAK,KAAK,UAAU,QAAQ,KAAK,KAAK;AACtD;AAIO,MAAM,YAAY,CAAC,EAAE,OAAO,GAAG,GAAG,WAAiD;AACxF,MAAI,KAAK,SAAS,MAAM,KAAK,SAAS,IAAI;AACxC,WAAO,EAAE,QAAQ,GAAG,OAAO,EAAE;AAAA,EAAA;AAExB,SAAA;AAAA,IACL,QAAQ,OAAO,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI;AAAA,IAC/C,OAAO,OAAO,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI;AAAA,EAChD;AACF;AAEO,MAAM,YAAY,CAAC,EAAE,OAAO,GAAG,GAAG,WAAiD;AACjF,SAAA;AAAA,IACL,QAAQ,OAAO,KAAK,IAAI,KAAK,MAAM,KAAK,MAAM;AAAA,IAC9C,OAAO,OAAO,KAAK,IAAI,KAAK,OAAO,KAAK,KAAK;AAAA,EAC/C;AACF;AAEO,MAAM,cAAc,CAAC,EAAE,OAAO,GAAG,aAAiE;AACvG,QAAM,IAAI,OAAO;AACjB,MAAI,MAAM,GAAG;AACX,WAAO,EAAE,QAAQ,GAAG,OAAO,EAAE;AAAA,EAAA;AAExB,SAAA,EAAE,QAAQ,OAAO,GAAG,OAAO,OAAO,OAAO,CAAC,EAAE,OAAO;AAC5D;AAEO,MAAM,eAAe,CAAC,OAAe,MAAc,OAAe,MAAM;AAC7E,SAAO,MAAM,KAAK,EAAE,SAAS,OAAO,QAAQ,KAAK,OAAO,EAAA,GAAK,CAAC,GAAG,MAAM,QAAQ,IAAI,IAAI;AACzF;AAEa,MAAA,QAAQ,CAAC,IAA4B,WAAiC;AACjF,QAAM,KAAc,CAAC;AAClB,KAAA,QAAQ,CAAC,MAAM;AAChB,UAAM,IAAW,CAAC;AACX,WAAA,QAAQ,CAAC,UAAU;AACtB,QAAA,KAAK,EAAE,KAAK,CAAC;AAAA,IAAA,CAChB;AACD,OAAG,KAAK,CAAC;AAAA,EAAA,CACV;AACM,SAAA;AACT;AAEa,MAAA,QAAQ,CAAC,IAAgB,WAA6C;AACjF,QAAM,KAA6B,CAAC;AACjC,KAAA,QAAQ,CAAC,MAAM;AAChB,UAAM,IAA0B,CAAC;AAC/B,MAAA,QAAQ,CAAC,GAAG,MAAM;AACd,UAAA,KAAK,OAAO,QAAQ;AACtB;AAAA,MAAA;AAEI,YAAA,QAAQ,OAAO,CAAC;AACtB,QAAE,KAAK,IAAI;AAAA,IAAA,CACZ;AACD,OAAG,KAAK,CAAC;AAAA,EAAA,CACV;AACM,SAAA;AACT;AASO,MAAM,YAAY,CACvB,KACA,KACA,SACA,SAAiD,MAAM,SACpD;AACH,QAAM,WAAiC,CAAC;AACxC,QAAM,EAAE,KAAK,MAAM,QAAQ,MAAU,IAAA;AACrC,QAAM,EAAE,QAAQ,YAAY,OAAO,WAAA,IAAe,YAAY;AAAA,IAC5D,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA,CACP;AACD,WAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,UAAM,UAAe,CAAC;AACtB,aAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAClC,YAAM,WAAW,EAAE,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK;AACrC,YAAA,WAAW,EAAE,GAAG,EAAE;AACxB,YAAM,QAAQ,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI;AAEnC,UAAI,IAAI,aAAa,KAAK,IAAI,aAAa,GAAG;AAC5C,YAAI,OAAO,EAAE,UAAU,OAAO,UAAU,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,SAAU,CAAA,GAAG;AACpE,cAAA,CAAC,EAAE,CAAC,IAAI;AAAA,QAAA;AAEd;AAAA,MAAA;AAEE,UAAA,QAAQ,WAAW,GAAG;AACxB,iBAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO;AAAA,MAAA;AAEpC,cAAQ,KAAK,KAAK;AAAA,IAAA;AAAA,EACpB;AAEK,SAAA;AACT;AAEO,MAAM,eAAe,CAAU,SAAiB,SAAiB,SAAoB;AAC1F,SAAO,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE,IAAI,MAAM,MAAM,OAAO,EAAE,KAAK,IAAI,CAAC;AAChE;AAOO,MAAM,8BAA8B,CAAC;AAAA,EAC1C,QAAQ,CAAC;AAAA,EACT,UAAU,CAAC;AAAA,EACX,SAAS,CAAC;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AACX,MASM;AACJ,SAAO,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA,UAAU,EAAE,CAAC,MAAM,GAAG,OAAO;AAAA,IAC7B;AAAA,EAAA,CACD;AACH;AAEO,MAAM,oBAAoB,CAAC;AAAA,EAChC,QAAQ,CAAC;AAAA,EACT,UAAU,CAAC;AAAA,EACX,WAAW,CAAC;AAAA,EACZ,YAAY;AACd,IAQI,OAAO;AACT,aAAW,EAAE,OAAO,WAAW,SAAA,CAAU;AACzC,QAAM,EAAE,SAAS,QAAQ,IAAI,OAAO,OAAO,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO;AAC9E,QAAM,cAAc,IAAI,EAAE,GAAG,SAAS,GAAG,SAAS;AAC9C,MAAA,MAAM,WAAW,KAAK,MAAM;AACxB,UAAA,WAAW,IAAI,CAAC;AAAA,EAAA;AAEjB,SAAA;AACT;AAEO,MAAM,aAAa,CAAI;AAAA,EAC5B,QAAQ,CAAC;AAAA,EACT,WAAW,CAAC;AAAA,EACZ;AACF,MAIM;AACJ,SAAO,KAAK,QAAQ,EAAE,QAAQ,CAAC,gBAAgB;AACvC,UAAA,SAAS,SAAS,WAAW;AACnC,UAAM,EAAE,GAAG,OAAO,GAAG,MAAM,IAAI,IAAI,WAAW;AACvC,WAAA,QAAQ,CAAC,KAAK,MAAM;AACrB,UAAA,QAAQ,CAAC,GAAG,MAAM;AACd,cAAA,KAAK,IAAI,EAAE,GAAG,QAAQ,GAAG,GAAG,QAAQ,GAAG;AAC7C,YAAI,WAAW;AACP,gBAAA,OAAO,MAAM,EAAE;AACf,gBAAA,EAAE,IAAI,EAAE,CAAC,SAAS,GAAG,GAAG,GAAG,KAAK;AAAA,QAAA,OACjC;AACL,gBAAM,EAAE,IAAI;AAAA,QAAA;AAAA,MACd,CACD;AAAA,IAAA,CACF;AAAA,EAAA,CACF;AACM,SAAA;AACT;AAEO,MAAM,uBAAuB,CAAC,QAA4B,OAAO;AACtE,MAAI,CAAC,OAAO,KAAK,IAAI,CAAC,GAAG,CAAC;AAC1B,SAAO,KAAK,KAAK,EAAE,IAAI,CAAC,YAAY;AAClC,UAAM,EAAE,GAAG,MAAM,IAAI,OAAO;AAC5B,QAAI,QAAQ,GAAG;AACL,cAAA;AAAA,IAAA;AAEV,QAAI,QAAQ,GAAG;AACL,cAAA;AAAA,IAAA;AAAA,EACV,CACD;AACD,SAAO,EAAE,SAAS,OAAO,SAAS,MAAM;AAC1C;AAEa,MAAA,QAAQ,CAAC,OAAe,QAAgB;AACnD,QAAM,OAAiB,CAAC;AACxB,WAAS,IAAI,OAAO,KAAK,KAAK,KAAK;AACjC,SAAK,KAAK,CAAC;AAAA,EAAA;AAEN,SAAA;AACT;AAEa,MAAA,0BAA0B,CAAC,eAAyB,aAAwB;AACnF,MAAA,cAAc,SAAS,IAAI;AACb,oBAAA;AAAA,MACd,MAAM,SAAS;AAAA,MACf,KAAK,SAAS;AAAA,MACd,OAAO,SAAS;AAAA,MAChB,QAAQ,SAAS;AAAA,IACnB;AAAA,EAAA;AAEK,SAAA;AACT;AAkBa,MAAA,cAAc,CAACA,WAA6B;AACvD,MAAIA,OAAM,QAAQ,GAAG,MAAM,IAAI;AAC7B,WAAO,CAACA,MAAK;AAAA,EAAA;AAGf,QAAM,SAAoB,CAAC;AAErB,QAAA,aAAa,aAAa,KAAKA,MAAK;AAE1C,MAAI,YAAY;AACR,UAAA,CAACC,WAAUC,OAAM,IAAIF,OAAM,MAAM,GAAG,EAAE,IAAI,MAAM;AACtD,aAAS,MAAMC,WAAU,OAAOC,SAAQ,OAAO;AACtC,aAAA,KAAK,GAAG,GAAG,EAAE;AAAA,IAAA;AAEf,WAAA;AAAA,EAAA;AAGH,QAAA,QAAQF,OAAM,MAAM,kCAAkC;AAC5D,MAAI,CAAC,OAAO;AACF,YAAA,MAAM,wBAAwBA,MAAK;AAC3C,WAAO,CAACA,MAAK;AAAA,EAAA;AAGf,QAAM,CAAG,EAAA,UAAU,UAAU,QAAQ,MAAM,IAAI;AAC/C,QAAM,gBAAgB,WAAW,IAAI,QAAQ,IAAI;AACjD,QAAM,cAAc,SAAS,IAAI,MAAM,IAAI;AAE3C,WAAS,MAAM,eAAe,OAAO,aAAa,OAAO;AACvD,UAAM,gBAAgB,YAAY,SAAS,IAAI,GAAG,IAAI;AACtD,QAAI,YAAY,QAAQ;AACb,eAAA,MAAM,OAAO,QAAQ,GAAG,OAAO,OAAO,MAAM,GAAG,OAAO;AAC7D,eAAO,KAAK,GAAG,aAAa,GAAG,GAAG,EAAE;AAAA,MAAA;AAAA,IACtC,WACS,CAAC,YAAY,CAAC,QAAQ;AAC/B,aAAO,KAAK,aAAa;AAAA,IAAA;AAAA,EAC3B;AAEK,SAAA;AACT;AAGa,MAAA,eAAe,CAAC,SAA6B;AAClD,QAAA,IAAI,UAAU,IAAI;AACxB,MAAI,EAAE,SAAS,EAAE,UAAU,GAAG;AACrB,WAAA,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,GAAG;AAAA,EAAA;AAE/C,SAAA,EAAE,GAAG,KAAK;AACnB;AAIO,MAAM,eAAe,CAC1B,KACA,MACA,WACA,aACW;AACX,SAAO,OAAO,MAAM;AAClB,UAAM,MAAM,KAAK,OAAO,MAAM,QAAQ,CAAC;AACnC,QAAA,UAAU,GAAG,GAAG;AAGX;AACL,cAAM,MAAM;AAAA,MAAA;AAAA,IACd,OACK;AAGE;AACL,eAAO,MAAM;AAAA,MAAA;AAAA,IACf;AAAA,EACF;AAEF,SAAwB;AAC1B;AC5Ya,MAAA,iBAAiB,CAAC,OAAkB,UAAiB;AAC1D,QAAA,EAAE,UAAU,cAAA,IAAkB;AAChC,MAAA,EAAE,GAAG,EAAA,IAAM;AACX,MAAA,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,GAAA,IAAO;AACjD,MAAA,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,GAAA,IAAO,MAAM,KAAK;AAC1D,QAAA,CAAC,SAAS,OAAO,IAAI,CAAC,MAAM,WAAW,GAAG,MAAM,YAAY;AAClE,MAAI,IAAI,SAAS;AACX,QAAA;AAAA,EAAA;AAEN,MAAI,IAAI,SAAS;AACX,QAAA;AAAA,EAAA;AAEN,MAAI,KAAK,SAAS;AACX,SAAA;AAAA,EAAA;AAEP,MAAI,KAAK,SAAS;AACX,SAAA;AAAA,EAAA;AAEP,MAAI,KAAK,SAAS;AACX,SAAA;AAAA,EAAA;AAEP,MAAI,KAAK,SAAS;AACX,SAAA;AAAA,EAAA;AAEP,MAAI,KAAK,SAAS;AACX,SAAA;AAAA,EAAA;AAEP,MAAI,KAAK,SAAS;AACX,SAAA;AAAA,EAAA;AAEP,MAAI,KAAK,SAAS;AACX,SAAA;AAAA,EAAA;AAEP,MAAI,KAAK,SAAS;AACX,SAAA;AAAA,EAAA;AAEA,SAAA;AAAA,IACL,UAAU,EAAE,GAAG,EAAE;AAAA,IACjB,eAAe,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,GAAG;AAAA,IAC5D,aAAa,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,GAAG;AAAA,EAC5D;AACF;AAEa,MAAA,iBAAiB,CAACG,eAAsB;AACnD,UAAQA,YAAW;AAAA,IACjB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,EAAA;AAEJ,SAAA;AACT;AAEa,MAAA,sBAAsB,CAAC,OAAc,UAAqB;AAC/D,QAAA,EAAE,aAAa,oBAAA,IAAwB;AACzC,MAAA,EAAE,aAAa;AACnB,MAAI,CAAC,aAAa;AACT,WAAA,EAAE,eAAe,GAAG;AAAA,EAAA;AAE7B,QAAM,gBAA2B,CAAC;AAClC,WAAS,IAAI,GAAG,KAAK,MAAM,QAAQ,KAAK;AACtC,aAAS,IAAI,GAAG,KAAK,MAAM,OAAO,KAAK;AAC/B,YAAA,IAAI,MAAM,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;AAC7C,YAAM,IAAI,sBAAsB,IAAI,EAAE,YAAY;AAClD,YAAM,IAAI,sBAAsB,cAAc,YAAY,YAAY;AACtE,UAAI,EAAE,QAAQ,CAAC,MAAM,IAAI;AACT,sBAAA,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;AAAA,MAAA;AAAA,IACzC;AAAA,EACF;AAEF,QAAM,oBAAoB,cAAc,WAAW,MAAM,cAAc,SAAS,MAAM,oBAAoB;AACtG,MAAA,cAAc,SAAS,GAAG;AACtB,UAAA,UAAU,cAAc,iBAAiB;AAC/C,eAAW,IAAI,OAAO;AAAA,EAAA;AAExB,SAAO,EAAE,eAAe,aAAa,mBAAmB,SAAS;AACnE;AAEa,MAAA,kBAAkB,CAAC,UAAqB;AACnD,QAAM,EAAE,SAAS,eAAe,SAAa,IAAA;AAC7C,QAAM,QAAQ,SAAS;AACvB,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EAAA;AAEL,MAAA,YAAY,MAAM,KAAK,gBAAgB;AAClC,WAAA;AAAA,EAAA;AAEF,SAAA,CAAC,CAAC,MAAM,KAAK;AACtB;AC7FO,MAAM,uBAAuB,CAAC,OAAc,EAAE,GAAG,QAAmB;;AAEnE,QAAA,UAAU,MAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AACpD,QAAA,UAAU,MAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AACpD,QAAA,SAAO,wCAAS,WAAT,mBAAiB,eAAc;AACtC,QAAA,QAAM,wCAAS,WAAT,mBAAiB,cAAa;AACpC,QAAA,KAAI,mCAAS,UAAS;AACtB,QAAA,KAAI,mCAAS,WAAU;AACtB,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ,MAAM;AAAA,IACd,OAAO,OAAO;AAAA,IACd,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF;AAEa,MAAA,gBAAgB,CAAC,MAAsB;AAClD,QAAM,MAAM,EAAE,WACZ,OAAO,EAAE;AACX,QAAM,SAAS,EAAE,cACf,QAAQ,EAAE;AACZ,QAAM,SAAS,MAAM,QACnB,QAAQ,OAAO;AACjB,SAAO,EAAE,KAAK,MAAM,QAAQ,OAAO,QAAQ,MAAM;AACnD;AAEa,MAAA,aAAa,CAAC,OAAc,MAAoD;;AAC3F,MAAI,KAAK,MAAM;AACN,WAAA;AAAA,EAAA;AAEL,MAAA,cAAc,GAChB,eAAe,GACf,iBAAiB,MAAM,WAAW,GAClC,gBAAgB,MAAM,WAAW;AAEnC,QAAM,EAAE,KAAK,MAAM,QAAQ,MAAM,IAAI,cAAc,CAAC;AAChD,MAAA,QAAQ,GACV,SAAS;AACX,WAAS,IAAI,GAAG,KAAK,MAAM,WAAA,GAAc,KAAK;AACtC,UAAA,MAAI,WAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ,MAA1C,mBAA6C,UAAS;AACvD,aAAA;AACL,QAAA,iBAAiB,KAAK,QAAQ,MAAM;AACtC,qBAAe,KAAK,IAAI,IAAI,YAAY,CAAC;AAAA,IAAA;AAE3C,QAAI,QAAQ,OAAO;AACjB,sBAAgB,KAAK,IAAI,IAAI,YAAY,MAAM,YAAY;AAC3D;AAAA,IAAA;AAAA,EACF;AAEF,WAAS,IAAI,GAAG,KAAK,MAAM,WAAA,GAAc,KAAK;AACtC,UAAA,MAAI,WAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ,MAA1C,mBAA6C,WAAU;AACvD,cAAA;AACN,QAAA,gBAAgB,KAAK,SAAS,KAAK;AACrC,oBAAc,KAAK,IAAI,IAAI,YAAY,CAAC;AAAA,IAAA;AAE1C,QAAI,SAAS,QAAQ;AACnB,uBAAiB,KAAK,IAAI,IAAI,YAAY,MAAM,YAAY;AAC5D;AAAA,IAAA;AAAA,EACF;AAEI,QAAA,KAAK,MAAM,aAAa,cAAc;AACtC,QAAA,KAAK,MAAM,cAAc,aAAa;AACtC,QAAA,SAAS,MAAM,YAAY;AAAA,IAC/B,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA,CACR;AACK,QAAA,QAAQ,MAAM,YAAY;AAAA,IAC9B,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,MAAM,WAAW;AAAA,IACzB,OAAO,MAAM,WAAW;AAAA,EAAA,CACzB;AACM,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU;AAAA,MACR,KAAK,OAAO;AAAA,MACZ,MAAM,OAAO;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,OAAO,MAAM;AAAA,IAAA;AAAA,EAEjB;AACF;AAEO,MAAM,cAAc,CACzB,OACA,GACA,aACA,WAA2B,WACxB;AACH,MAAI,KAAK,MAAM;AACb;AAAA,EAAA;AAEI,QAAA,SAAS,cAAc,CAAC;AACxB,QAAA,SAAS,qBAAqB,OAAO,WAAW;AAGhD,QAAA,KAAK,OAAO,MAAM,MAAM;AACxB,QAAA,OAAO,OAAO,OAAO,MAAM;AACjC,QAAM,OAAO,OAAO,SAAS,OAAO,SAAS;AAC7C,QAAM,QAAQ,OAAO,QAAQ,OAAO,QAAQ;AAEtC,QAAA,YAAY,KAAK,OAAO;AACxB,QAAA,aAAa,OAAO,OAAO;AAC3B,QAAA,eAAe,OAAO,SAAS,OAAO;AACtC,QAAA,cAAc,OAAO,QAAQ,OAAO;AAE1C,MAAI,YAAY;AACd,QAAI,WAAW;AAEb,QAAE,SAAS,EAAE,MAAM,KAAK,IAAI,UAAU;AAAA,eAC7B,cAAc;AAEvB,QAAE,SAAS,EAAE,MAAM,KAAK,MAAM,UAAU;AAAA,IAAA,OACnC;AAEL,QAAE,SAAS,EAAE,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IAAA;AAAA,aAEvC,aAAa;AACtB,QAAI,WAAW;AAEb,QAAE,SAAS,EAAE,MAAM,OAAO,KAAK,IAAI,UAAU;AAAA,eACpC,cAAc;AAEvB,QAAE,SAAS,EAAE,MAAM,OAAO,KAAK,MAAM,UAAU;AAAA,IAAA,OAC1C;AAEH,QAAA,SAAS,EAAE,MAAM,OAAO,KAAK,OAAO,KAAK,UAAU;AAAA,IAAA;AAAA,EACvD,OACK;AACL,QAAI,WAAW;AAEX,QAAA,SAAS,EAAE,MAAM,OAAO,MAAM,KAAK,IAAI,UAAU;AAAA,eAC1C,cAAc;AAErB,QAAA,SAAS,EAAE,MAAM,OAAO,MAAM,KAAK,MAAM,UAAU;AAAA,IAAA,MAChD;AAAA,EAEP;AAEJ;AAIA,MAAM,qBAAqB,CACzB,UACA,aACA,UACA,YACW;;AACX,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA,SAAS,SAAS;AAAA,IAClB,CAAC,QAAQ,YAAY,SAAS,GAAG,EAAE,sBAAA,CAAuB,IAAI;AAAA,EAEhE;AACA,SAAO,WAAS,cAAS,KAAK,MAAd,mBAAiB,QAAQ,aAAY,GAAG;AAC1D;AAEa,MAAA,mBAAmB,CAAC,mBAA6C;AACtE,QAAA;AAAA,IACJ,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA,IACL,eAAe,sBAAsB;AAEzC,QAAM,OAAO,MAAM,KAAK,eAAe,iBAAiB,aAAa,CAAC;AACtE,QAAM,OAAO,MAAM,KAAK,eAAe,iBAAiB,YAAY,CAAC;AAE/D,QAAA,MAAM,mBAAmB,MAAM,CAAC,SAAS,KAAK,KAAK,aAAa,GAAG;AACnE,QAAA,SAAS,mBAAmB,MAAM,CAAC,SAAS,KAAK,QAAQ,gBAAgB,GAAG;AAC5E,QAAA,OAAO,mBAAmB,MAAM,CAAC,SAAS,KAAK,MAAM,cAAc,GAAG;AACtE,QAAA,QAAQ,mBAAmB,MAAM,CAAC,SAAS,KAAK,OAAO,eAAe,GAAG;AAE/E,SAAO,EAAE,KAAK,MAAM,QAAQ,MAAM;AACpC;ACvLO,MAAM,aAAyB;AAC/B,MAAM,aAAyB;AAC/B,MAAM,kBAA8B;AACpC,MAAM,kBAA8B;AACpC,MAAM,iBAA6B;AACnC,MAAM,kBAA8B;AACpC,MAAM,WAAuB;AAC7B,MAAM,SAAqB;AAC3B,MAAM,QAAoB;AAC1B,MAAM,QAAoB;AAC1B,MAAM,OAAmB;AACzB,MAAM,SAAqB;AAC3B,MAAM,cAA0B;AAChC,MAAM,YAAwB;AAC9B,MAAM,YAAwB;AAE9B,MAAM,cAA0B;AAEhC,MAAM,OAAmB,WAAW;AAEpC,MAAM,SAAqB,QAAQ,QAAQ,OAAO,SAAS,cAAc,YAAY;AAErF,MAAM,aAAyB,kBAAkB;AAEjD,MAAM,aAAyB,iBAAiB;AAEhD,MAAM,MAAkB,aAAa;AAErC,MAAM,SAAqB,aAAa;AAElC,MAAA,WAAuB,SAAS,SAAS,MAAM;AAE/C,MAAA,eAAe,CAACA,YAAmC,SAAqB;AACnF,MAAIA,eAAc,QAAW;AACpB,WAAA;AAAA,EAAA;AAET,UAAQA,aAAY,UAAU;AAChC;AAGa,MAAA,kBAAkB,CAAC,eAAuC;AACrE,QAAMC,cAAuB,CAAC;AAC1B,MAAA,aAAa,YAAY,UAAU,GAAG;AACxCA,gBAAW,KAAK,WAAW;AAAA,EAAA;AAEzB,MAAA,aAAa,YAAY,UAAU,GAAG;AACxCA,gBAAW,KAAK,WAAW;AAAA,EAAA;AAEzB,MAAA,aAAa,YAAY,eAAe,GAAG;AAC7CA,gBAAW,KAAK,gBAAgB;AAAA,EAAA;AAE9B,MAAA,aAAa,YAAY,eAAe,GAAG;AAC7CA,gBAAW,KAAK,gBAAgB;AAAA,EAAA;AAE9B,MAAA,aAAa,YAAY,cAAc,GAAG;AAC5CA,gBAAW,KAAK,eAAe;AAAA,EAAA;AAE7B,MAAA,aAAa,YAAY,eAAe,GAAG;AAC7CA,gBAAW,KAAK,gBAAgB;AAAA,EAAA;AAE9B,MAAA,aAAa,YAAY,QAAQ,GAAG;AACtCA,gBAAW,KAAK,UAAU;AAAA,EAAA;AAExB,MAAA,aAAa,YAAY,MAAM,GAAG;AACpCA,gBAAW,KAAK,QAAQ;AAAA,EAAA;AAEtB,MAAA,aAAa,YAAY,KAAK,GAAG;AACnCA,gBAAW,KAAK,OAAO;AAAA,EAAA;AAErB,MAAA,aAAa,YAAY,KAAK,GAAG;AACnCA,gBAAW,KAAK,OAAO;AAAA,EAAA;AAErB,MAAA,aAAa,YAAY,MAAM,GAAG;AACpCA,gBAAW,KAAK,QAAQ;AAAA,EAAA;AAEtB,MAAA,aAAa,YAAY,WAAW,GAAG;AACzCA,gBAAW,KAAK,aAAa;AAAA,EAAA;AAE3B,MAAA,aAAa,YAAY,SAAS,GAAG;AACvCA,gBAAW,KAAK,WAAW;AAAA,EAAA;AAEtBA,SAAAA;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpFA,KAAC,SAAS,GAAE,GAAE;AAAsD,uBAAe,EAAmH;AAAA,IAAA,EAAEC,WAAM,WAAU;AAAc,UAAI,IAAE,KAAI,IAAE,KAAI,IAAE,MAAK,IAAE,eAAc,IAAE,UAAS,IAAE,UAAS,IAAE,QAAO,IAAE,OAAM,IAAE,QAAO,IAAE,SAAQ,IAAE,WAAU,IAAE,QAAO,IAAE,QAAO,IAAE,gBAAe,IAAE,8FAA6F,IAAE,uFAAsF,IAAE,EAAC,MAAK,MAAK,UAAS,2DAA2D,MAAM,GAAG,GAAE,QAAO,wFAAwF,MAAM,GAAG,GAAE,SAAQ,SAASC,IAAE;AAAC,YAAIC,KAAE,CAAC,MAAK,MAAK,MAAK,IAAI,GAAEC,KAAEF,KAAE;AAAI,eAAM,MAAIA,MAAGC,IAAGC,KAAE,MAAI,EAAE,KAAGD,GAAEC,EAAC,KAAGD,GAAE,CAAC,KAAG;AAAA,MAAG,EAAC,GAAE,IAAE,SAASD,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAE,OAAOH,EAAC;AAAE,eAAM,CAACG,MAAGA,GAAE,UAAQF,KAAED,KAAE,KAAG,MAAMC,KAAE,IAAEE,GAAE,MAAM,EAAE,KAAKD,EAAC,IAAEF;AAAA,MAAC,GAAE,IAAE,EAAC,GAAE,GAAE,GAAE,SAASA,IAAE;AAAC,YAAIC,KAAE,CAACD,GAAE,UAAS,GAAGE,KAAE,KAAK,IAAID,EAAC,GAAEE,KAAE,KAAK,MAAMD,KAAE,EAAE,GAAEE,KAAEF,KAAE;AAAG,gBAAOD,MAAG,IAAE,MAAI,OAAK,EAAEE,IAAE,GAAE,GAAG,IAAE,MAAI,EAAEC,IAAE,GAAE,GAAG;AAAA,MAAC,GAAE,GAAE,SAASJ,GAAEC,IAAEC,IAAE;AAAC,YAAGD,GAAE,KAAI,IAAGC,GAAE,KAAI,EAAG,QAAM,CAACF,GAAEE,IAAED,EAAC;AAAE,YAAIE,KAAE,MAAID,GAAE,KAAI,IAAGD,GAAE,WAASC,GAAE,UAAQD,GAAE,MAAO,IAAEG,KAAEH,GAAE,QAAQ,IAAIE,IAAE,CAAC,GAAEE,KAAEH,KAAEE,KAAE,GAAEE,KAAEL,GAAE,MAAK,EAAG,IAAIE,MAAGE,KAAE,KAAG,IAAG,CAAC;AAAE,eAAM,EAAE,EAAEF,MAAGD,KAAEE,OAAIC,KAAED,KAAEE,KAAEA,KAAEF,QAAK;AAAA,MAAE,GAAE,GAAE,SAASJ,IAAE;AAAC,eAAOA,KAAE,IAAE,KAAK,KAAKA,EAAC,KAAG,IAAE,KAAK,MAAMA,EAAC;AAAA,MAAC,GAAE,GAAE,SAASA,IAAE;AAAC,eAAM,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,EAAC,EAAEA,EAAC,KAAG,OAAOA,MAAG,EAAE,EAAE,YAAa,EAAC,QAAQ,MAAK,EAAE;AAAA,MAAC,GAAE,GAAE,SAASA,IAAE;AAAC,eAAO,WAASA;AAAA,MAAC,EAAC,GAAE,IAAE,MAAK,IAAE,CAAE;AAAC,QAAE,CAAC,IAAE;AAAE,UAAI,IAAE,kBAAiB,IAAE,SAASA,IAAE;AAAC,eAAOA,cAAa,KAAG,EAAE,CAACA,MAAG,CAACA,GAAE,CAAC;AAAA,MAAE,GAAE,IAAE,SAASA,GAAEC,IAAEC,IAAEC,IAAE;AAAC,YAAIC;AAAE,YAAG,CAACH,GAAE,QAAO;AAAE,YAAG,YAAU,OAAOA,IAAE;AAAC,cAAII,KAAEJ,GAAE,YAAa;AAAC,YAAEI,EAAC,MAAID,KAAEC,KAAGH,OAAI,EAAEG,EAAC,IAAEH,IAAEE,KAAEC;AAAG,cAAIC,KAAEL,GAAE,MAAM,GAAG;AAAE,cAAG,CAACG,MAAGE,GAAE,SAAO,EAAE,QAAON,GAAEM,GAAE,CAAC,CAAC;AAAA,QAAC,OAAK;AAAC,cAAIC,KAAEN,GAAE;AAAK,YAAEM,EAAC,IAAEN,IAAEG,KAAEG;AAAA,QAAC;AAAC,eAAM,CAACJ,MAAGC,OAAI,IAAEA,KAAGA,MAAG,CAACD,MAAG;AAAA,MAAC,GAAE,IAAE,SAASH,IAAEC,IAAE;AAAC,YAAG,EAAED,EAAC,EAAE,QAAOA,GAAE,MAAK;AAAG,YAAIE,KAAE,YAAU,OAAOD,KAAEA,KAAE,CAAE;AAAC,eAAOC,GAAE,OAAKF,IAAEE,GAAE,OAAK,WAAU,IAAI,EAAEA,EAAC;AAAA,MAAC,GAAE,IAAE;AAAE,QAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,SAASF,IAAEC,IAAE;AAAC,eAAO,EAAED,IAAE,EAAC,QAAOC,GAAE,IAAG,KAAIA,GAAE,IAAG,GAAEA,GAAE,IAAG,SAAQA,GAAE,QAAO,CAAC;AAAA,MAAC;AAAE,UAAI,IAAE,WAAU;AAAC,iBAASO,GAAER,IAAE;AAAC,eAAK,KAAG,EAAEA,GAAE,QAAO,MAAK,IAAE,GAAE,KAAK,MAAMA,EAAC,GAAE,KAAK,KAAG,KAAK,MAAIA,GAAE,KAAG,CAAA,GAAG,KAAK,CAAC,IAAE;AAAA,QAAE;AAAC,YAAIS,KAAED,GAAE;AAAU,eAAOC,GAAE,QAAM,SAAST,IAAE;AAAC,eAAK,KAAG,SAASA,IAAE;AAAC,gBAAIC,KAAED,GAAE,MAAKE,KAAEF,GAAE;AAAI,gBAAG,SAAOC,GAAE,QAAO,oBAAI,KAAK,GAAG;AAAE,gBAAG,EAAE,EAAEA,EAAC,EAAE,QAAO,oBAAI;AAAK,gBAAGA,cAAa,KAAK,QAAO,IAAI,KAAKA,EAAC;AAAE,gBAAG,YAAU,OAAOA,MAAG,CAAC,MAAM,KAAKA,EAAC,GAAE;AAAC,kBAAIE,KAAEF,GAAE,MAAM,CAAC;AAAE,kBAAGE,IAAE;AAAC,oBAAIC,KAAED,GAAE,CAAC,IAAE,KAAG,GAAEE,MAAGF,GAAE,CAAC,KAAG,KAAK,UAAU,GAAE,CAAC;AAAE,uBAAOD,KAAE,IAAI,KAAK,KAAK,IAAIC,GAAE,CAAC,GAAEC,IAAED,GAAE,CAAC,KAAG,GAAEA,GAAE,CAAC,KAAG,GAAEA,GAAE,CAAC,KAAG,GAAEA,GAAE,CAAC,KAAG,GAAEE,EAAC,CAAC,IAAE,IAAI,KAAKF,GAAE,CAAC,GAAEC,IAAED,GAAE,CAAC,KAAG,GAAEA,GAAE,CAAC,KAAG,GAAEA,GAAE,CAAC,KAAG,GAAEA,GAAE,CAAC,KAAG,GAAEE,EAAC;AAAA,cAAC;AAAA,YAAC;AAAC,mBAAO,IAAI,KAAKJ,EAAC;AAAA,UAAC,EAAED,EAAC,GAAE,KAAK,KAAM;AAAA,QAAA,GAAES,GAAE,OAAK,WAAU;AAAC,cAAIT,KAAE,KAAK;AAAG,eAAK,KAAGA,GAAE,eAAc,KAAK,KAAGA,GAAE,SAAQ,GAAG,KAAK,KAAGA,GAAE,QAAS,GAAC,KAAK,KAAGA,GAAE,OAAQ,GAAC,KAAK,KAAGA,GAAE,YAAW,KAAK,KAAGA,GAAE,WAAU,GAAG,KAAK,KAAGA,GAAE,WAAU,GAAG,KAAK,MAAIA,GAAE,gBAAiB;AAAA,QAAA,GAAES,GAAE,SAAO,WAAU;AAAC,iBAAO;AAAA,QAAC,GAAEA,GAAE,UAAQ,WAAU;AAAC,iBAAM,EAAE,KAAK,GAAG,SAAU,MAAG;AAAA,QAAE,GAAEA,GAAE,SAAO,SAAST,IAAEC,IAAE;AAAC,cAAIC,KAAE,EAAEF,EAAC;AAAE,iBAAO,KAAK,QAAQC,EAAC,KAAGC,MAAGA,MAAG,KAAK,MAAMD,EAAC;AAAA,QAAC,GAAEQ,GAAE,UAAQ,SAAST,IAAEC,IAAE;AAAC,iBAAO,EAAED,EAAC,IAAE,KAAK,QAAQC,EAAC;AAAA,QAAC,GAAEQ,GAAE,WAAS,SAAST,IAAEC,IAAE;AAAC,iBAAO,KAAK,MAAMA,EAAC,IAAE,EAAED,EAAC;AAAA,QAAC,GAAES,GAAE,KAAG,SAAST,IAAEC,IAAEC,IAAE;AAAC,iBAAO,EAAE,EAAEF,EAAC,IAAE,KAAKC,EAAC,IAAE,KAAK,IAAIC,IAAEF,EAAC;AAAA,QAAC,GAAES,GAAE,OAAK,WAAU;AAAC,iBAAO,KAAK,MAAM,KAAK,QAAS,IAAC,GAAG;AAAA,QAAC,GAAEA,GAAE,UAAQ,WAAU;AAAC,iBAAO,KAAK,GAAG;QAAS,GAAEA,GAAE,UAAQ,SAAST,IAAEC,IAAE;AAAC,cAAIC,KAAE,MAAKC,KAAE,CAAC,CAAC,EAAE,EAAEF,EAAC,KAAGA,IAAES,KAAE,EAAE,EAAEV,EAAC,GAAEW,KAAE,SAASX,IAAEC,IAAE;AAAC,gBAAIG,KAAE,EAAE,EAAEF,GAAE,KAAG,KAAK,IAAIA,GAAE,IAAGD,IAAED,EAAC,IAAE,IAAI,KAAKE,GAAE,IAAGD,IAAED,EAAC,GAAEE,EAAC;AAAE,mBAAOC,KAAEC,KAAEA,GAAE,MAAM,CAAC;AAAA,UAAC,GAAEQ,KAAE,SAASZ,IAAEC,IAAE;AAAC,mBAAO,EAAE,EAAEC,GAAE,OAAQ,EAACF,EAAC,EAAE,MAAME,GAAE,OAAO,GAAG,IAAGC,KAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,IAAG,GAAG,GAAG,MAAMF,EAAC,CAAC,GAAEC,EAAC;AAAA,UAAC,GAAEW,KAAE,KAAK,IAAGL,KAAE,KAAK,IAAGC,KAAE,KAAK,IAAGK,KAAE,SAAO,KAAK,KAAG,QAAM;AAAI,kBAAOJ,IAAC;AAAA,YAAE,KAAK;AAAE,qBAAOP,KAAEQ,GAAE,GAAE,CAAC,IAAEA,GAAE,IAAG,EAAE;AAAA,YAAE,KAAK;AAAE,qBAAOR,KAAEQ,GAAE,GAAEH,EAAC,IAAEG,GAAE,GAAEH,KAAE,CAAC;AAAA,YAAE,KAAK;AAAE,kBAAIO,KAAE,KAAK,QAAO,EAAG,aAAW,GAAEC,MAAGH,KAAEE,KAAEF,KAAE,IAAEA,MAAGE;AAAE,qBAAOJ,GAAER,KAAEM,KAAEO,KAAEP,MAAG,IAAEO,KAAGR,EAAC;AAAA,YAAE,KAAK;AAAA,YAAE,KAAK;AAAE,qBAAOI,GAAEE,KAAE,SAAQ,CAAC;AAAA,YAAE,KAAK;AAAE,qBAAOF,GAAEE,KAAE,WAAU,CAAC;AAAA,YAAE,KAAK;AAAE,qBAAOF,GAAEE,KAAE,WAAU,CAAC;AAAA,YAAE,KAAK;AAAE,qBAAOF,GAAEE,KAAE,gBAAe,CAAC;AAAA,YAAE;AAAQ,qBAAO,KAAK;UAAO;AAAA,QAAC,GAAEL,GAAE,QAAM,SAAST,IAAE;AAAC,iBAAO,KAAK,QAAQA,IAAE,KAAE;AAAA,QAAC,GAAES,GAAE,OAAK,SAAST,IAAEC,IAAE;AAAC,cAAIC,IAAEe,KAAE,EAAE,EAAEjB,EAAC,GAAEU,KAAE,SAAO,KAAK,KAAG,QAAM,KAAIC,MAAGT,KAAE,CAAE,GAACA,GAAE,CAAC,IAAEQ,KAAE,QAAOR,GAAE,CAAC,IAAEQ,KAAE,QAAOR,GAAE,CAAC,IAAEQ,KAAE,SAAQR,GAAE,CAAC,IAAEQ,KAAE,YAAWR,GAAE,CAAC,IAAEQ,KAAE,SAAQR,GAAE,CAAC,IAAEQ,KAAE,WAAUR,GAAE,CAAC,IAAEQ,KAAE,WAAUR,GAAE,CAAC,IAAEQ,KAAE,gBAAeR,IAAGe,EAAC,GAAEL,KAAEK,OAAI,IAAE,KAAK,MAAIhB,KAAE,KAAK,MAAIA;AAAE,cAAGgB,OAAI,KAAGA,OAAI,GAAE;AAAC,gBAAIJ,KAAE,KAAK,MAAO,EAAC,IAAI,GAAE,CAAC;AAAE,YAAAA,GAAE,GAAGF,EAAC,EAAEC,EAAC,GAAEC,GAAE,QAAO,KAAK,KAAGA,GAAE,IAAI,GAAE,KAAK,IAAI,KAAK,IAAGA,GAAE,aAAa,CAAC,EAAE;AAAA,UAAE,MAAM,CAAAF,MAAG,KAAK,GAAGA,EAAC,EAAEC,EAAC;AAAE,iBAAO,KAAK,KAAI,GAAG;AAAA,QAAI,GAAEH,GAAE,MAAI,SAAST,IAAEC,IAAE;AAAC,iBAAO,KAAK,QAAQ,KAAKD,IAAEC,EAAC;AAAA,QAAC,GAAEQ,GAAE,MAAI,SAAST,IAAE;AAAC,iBAAO,KAAK,EAAE,EAAEA,EAAC,CAAC,EAAC;AAAA,QAAE,GAAES,GAAE,MAAI,SAASN,IAAEO,IAAE;AAAC,cAAIQ,IAAEP,KAAE;AAAK,UAAAR,KAAE,OAAOA,EAAC;AAAE,cAAIS,KAAE,EAAE,EAAEF,EAAC,GAAEG,KAAE,SAASb,IAAE;AAAC,gBAAIC,KAAE,EAAEU,EAAC;AAAE,mBAAO,EAAE,EAAEV,GAAE,KAAKA,GAAE,KAAM,IAAC,KAAK,MAAMD,KAAEG,EAAC,CAAC,GAAEQ,EAAC;AAAA,UAAC;AAAE,cAAGC,OAAI,EAAE,QAAO,KAAK,IAAI,GAAE,KAAK,KAAGT,EAAC;AAAE,cAAGS,OAAI,EAAE,QAAO,KAAK,IAAI,GAAE,KAAK,KAAGT,EAAC;AAAE,cAAGS,OAAI,EAAE,QAAOC,GAAE,CAAC;AAAE,cAAGD,OAAI,EAAE,QAAOC,GAAE,CAAC;AAAE,cAAIL,MAAGU,KAAE,IAAGA,GAAE,CAAC,IAAE,GAAEA,GAAE,CAAC,IAAE,GAAEA,GAAE,CAAC,IAAE,GAAEA,IAAGN,EAAC,KAAG,GAAEH,KAAE,KAAK,GAAG,QAAS,IAACN,KAAEK;AAAE,iBAAO,EAAE,EAAEC,IAAE,IAAI;AAAA,QAAC,GAAEA,GAAE,WAAS,SAAST,IAAEC,IAAE;AAAC,iBAAO,KAAK,IAAI,KAAGD,IAAEC,EAAC;AAAA,QAAC,GAAEQ,GAAE,SAAO,SAAST,IAAE;AAAC,cAAIC,KAAE,MAAKC,KAAE,KAAK,QAAO;AAAG,cAAG,CAAC,KAAK,QAAS,EAAC,QAAOA,GAAE,eAAa;AAAE,cAAIC,KAAEH,MAAG,wBAAuBI,KAAE,EAAE,EAAE,IAAI,GAAEC,KAAE,KAAK,IAAGC,KAAE,KAAK,IAAGC,KAAE,KAAK,IAAGU,KAAEf,GAAE,UAASiB,KAAEjB,GAAE,QAAOQ,KAAER,GAAE,UAASkB,KAAE,SAASpB,IAAEE,IAAEE,IAAEC,IAAE;AAAC,mBAAOL,OAAIA,GAAEE,EAAC,KAAGF,GAAEC,IAAEE,EAAC,MAAIC,GAAEF,EAAC,EAAE,MAAM,GAAEG,EAAC;AAAA,UAAC,GAAEa,KAAE,SAASlB,IAAE;AAAC,mBAAO,EAAE,EAAEK,KAAE,MAAI,IAAGL,IAAE,GAAG;AAAA,UAAC,GAAEY,KAAEF,MAAG,SAASV,IAAEC,IAAEC,IAAE;AAAC,gBAAIC,KAAEH,KAAE,KAAG,OAAK;AAAK,mBAAOE,KAAEC,GAAE,gBAAcA;AAAA,UAAC;AAAE,iBAAOA,GAAE,QAAQ,GAAG,SAASH,IAAEG,IAAE;AAAC,mBAAOA,MAAG,SAASH,IAAE;AAAC,sBAAOA,IAAG;AAAA,gBAAA,KAAI;AAAK,yBAAO,OAAOC,GAAE,EAAE,EAAE,MAAM,EAAE;AAAA,gBAAE,KAAI;AAAO,yBAAO,EAAE,EAAEA,GAAE,IAAG,GAAE,GAAG;AAAA,gBAAE,KAAI;AAAI,yBAAOM,KAAE;AAAA,gBAAE,KAAI;AAAK,yBAAO,EAAE,EAAEA,KAAE,GAAE,GAAE,GAAG;AAAA,gBAAE,KAAI;AAAM,yBAAOa,GAAElB,GAAE,aAAYK,IAAEY,IAAE,CAAC;AAAA,gBAAE,KAAI;AAAO,yBAAOC,GAAED,IAAEZ,EAAC;AAAA,gBAAE,KAAI;AAAI,yBAAON,GAAE;AAAA,gBAAG,KAAI;AAAK,yBAAO,EAAE,EAAEA,GAAE,IAAG,GAAE,GAAG;AAAA,gBAAE,KAAI;AAAI,yBAAO,OAAOA,GAAE,EAAE;AAAA,gBAAE,KAAI;AAAK,yBAAOmB,GAAElB,GAAE,aAAYD,GAAE,IAAGgB,IAAE,CAAC;AAAA,gBAAE,KAAI;AAAM,yBAAOG,GAAElB,GAAE,eAAcD,GAAE,IAAGgB,IAAE,CAAC;AAAA,gBAAE,KAAI;AAAO,yBAAOA,GAAEhB,GAAE,EAAE;AAAA,gBAAE,KAAI;AAAI,yBAAO,OAAOI,EAAC;AAAA,gBAAE,KAAI;AAAK,yBAAO,EAAE,EAAEA,IAAE,GAAE,GAAG;AAAA,gBAAE,KAAI;AAAI,yBAAOa,GAAE,CAAC;AAAA,gBAAE,KAAI;AAAK,yBAAOA,GAAE,CAAC;AAAA,gBAAE,KAAI;AAAI,yBAAON,GAAEP,IAAEC,IAAE,IAAE;AAAA,gBAAE,KAAI;AAAI,yBAAOM,GAAEP,IAAEC,IAAE,KAAE;AAAA,gBAAE,KAAI;AAAI,yBAAO,OAAOA,EAAC;AAAA,gBAAE,KAAI;AAAK,yBAAO,EAAE,EAAEA,IAAE,GAAE,GAAG;AAAA,gBAAE,KAAI;AAAI,yBAAO,OAAOL,GAAE,EAAE;AAAA,gBAAE,KAAI;AAAK,yBAAO,EAAE,EAAEA,GAAE,IAAG,GAAE,GAAG;AAAA,gBAAE,KAAI;AAAM,yBAAO,EAAE,EAAEA,GAAE,KAAI,GAAE,GAAG;AAAA,gBAAE,KAAI;AAAI,yBAAOG;AAAA,cAAC;AAAC,qBAAO;AAAA,YAAI,EAAEJ,EAAC,KAAGI,GAAE,QAAQ,KAAI,EAAE;AAAA,UAAC,CAAC;AAAA,QAAE,GAAEK,GAAE,YAAU,WAAU;AAAC,iBAAO,KAAG,CAAC,KAAK,MAAM,KAAK,GAAG,kBAAmB,IAAC,EAAE;AAAA,QAAC,GAAEA,GAAE,OAAK,SAASN,IAAEe,IAAEP,IAAE;AAAC,cAAIC,IAAEC,KAAE,MAAKL,KAAE,EAAE,EAAEU,EAAC,GAAET,KAAE,EAAEN,EAAC,GAAEW,MAAGL,GAAE,UAAW,IAAC,KAAK,UAAW,KAAE,GAAEM,KAAE,OAAKN,IAAEO,KAAE,WAAU;AAAC,mBAAO,EAAE,EAAEH,IAAEJ,EAAC;AAAA,UAAC;AAAE,kBAAOD,IAAC;AAAA,YAAE,KAAK;AAAE,cAAAI,KAAEI,GAAG,IAAC;AAAG;AAAA,YAAM,KAAK;AAAE,cAAAJ,KAAEI,GAAG;AAAC;AAAA,YAAM,KAAK;AAAE,cAAAJ,KAAEI,OAAI;AAAE;AAAA,YAAM,KAAK;AAAE,cAAAJ,MAAGG,KAAED,MAAG;AAAO;AAAA,YAAM,KAAK;AAAE,cAAAF,MAAGG,KAAED,MAAG;AAAM;AAAA,YAAM,KAAK;AAAE,cAAAF,KAAEG,KAAE;AAAE;AAAA,YAAM,KAAK;AAAE,cAAAH,KAAEG,KAAE;AAAE;AAAA,YAAM,KAAK;AAAE,cAAAH,KAAEG,KAAE;AAAE;AAAA,YAAM;AAAQ,cAAAH,KAAEG;AAAA,UAAC;AAAC,iBAAOJ,KAAEC,KAAE,EAAE,EAAEA,EAAC;AAAA,QAAC,GAAEH,GAAE,cAAY,WAAU;AAAC,iBAAO,KAAK,MAAM,CAAC,EAAE;AAAA,QAAE,GAAEA,GAAE,UAAQ,WAAU;AAAC,iBAAO,EAAE,KAAK,EAAE;AAAA,QAAC,GAAEA,GAAE,SAAO,SAAST,IAAEC,IAAE;AAAC,cAAG,CAACD,GAAE,QAAO,KAAK;AAAG,cAAIE,KAAE,KAAK,MAAK,GAAGC,KAAE,EAAEH,IAAEC,IAAE,IAAE;AAAE,iBAAOE,OAAID,GAAE,KAAGC,KAAGD;AAAA,QAAC,GAAEO,GAAE,QAAM,WAAU;AAAC,iBAAO,EAAE,EAAE,KAAK,IAAG,IAAI;AAAA,QAAC,GAAEA,GAAE,SAAO,WAAU;AAAC,iBAAO,IAAI,KAAK,KAAK,QAAS,CAAA;AAAA,QAAC,GAAEA,GAAE,SAAO,WAAU;AAAC,iBAAO,KAAK,QAAO,IAAG,KAAK,YAAa,IAAC;AAAA,QAAI,GAAEA,GAAE,cAAY,WAAU;AAAC,iBAAO,KAAK,GAAG,YAAW;AAAA,QAAE,GAAEA,GAAE,WAAS,WAAU;AAAC,iBAAO,KAAK,GAAG,YAAW;AAAA,QAAE,GAAED;AAAA,MAAC,EAAG,GAAC,IAAE,EAAE;AAAU,aAAO,EAAE,YAAU,GAAE,CAAC,CAAC,OAAM,CAAC,GAAE,CAAC,MAAK,CAAC,GAAE,CAAC,MAAK,CAAC,GAAE,CAAC,MAAK,CAAC,GAAE,CAAC,MAAK,CAAC,GAAE,CAAC,MAAK,CAAC,GAAE,CAAC,MAAK,CAAC,GAAE,CAAC,MAAK,CAAC,CAAC,EAAE,QAAS,SAASR,IAAE;AAAC,UAAEA,GAAE,CAAC,CAAC,IAAE,SAASC,IAAE;AAAC,iBAAO,KAAK,GAAGA,IAAED,GAAE,CAAC,GAAEA,GAAE,CAAC,CAAC;AAAA,QAAC;AAAA,MAAC,CAAG,GAAC,EAAE,SAAO,SAASA,IAAEC,IAAE;AAAC,eAAOD,GAAE,OAAKA,GAAEC,IAAE,GAAE,CAAC,GAAED,GAAE,KAAG,OAAI;AAAA,MAAC,GAAE,EAAE,SAAO,GAAE,EAAE,UAAQ,GAAE,EAAE,OAAK,SAASA,IAAE;AAAC,eAAO,EAAE,MAAIA,EAAC;AAAA,MAAC,GAAE,EAAE,KAAG,EAAE,CAAC,GAAE,EAAE,KAAG,GAAE,EAAE,IAAE,IAAG;AAAA,IAAC,CAAC;AAAA;;;;;ACwBr/N,MAAM,QAAQ,CAAC,UAAkB,gBAAgB,SAAS;AACxD,MAAI,KAAK;AACT,MAAI,iBAAiB,GAAG,WAAW,GAAG,GAAG;AAClC,SAAA,GAAG,MAAM,CAAC;AAAA,EAAA;AAEjB,MAAI,iBAAiB,GAAG,SAAS,GAAG,GAAG;AAChC,SAAA,GAAG,MAAM,GAAG,EAAE;AAAA,EAAA;AAEd,SAAA,GAAG,QAAQ,KAAK,EAAE;AAC3B;AAEO,MAAM,aAAa;AAAA,EAIxB,YAAY,MAAc,SAAiB,OAAe;AACxD,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EAAA;AAEjB;AAEA,MAAM,OAAgB;AAAA,EAEpB,YAAY,OAAU;AACpB,SAAK,QAAQ;AAAA,EAAA;AAEjB;AAEO,MAAM,oBAAoB,OAAO;AAAA,EAC/B,WAAW;AAChB,WAAO,KAAK;AAAA,EAAA;AAEhB;AAEO,MAAM,2BAA2B,OAAO;AAAA,EACtC,WAAW;AACV,UAAA,IAAI,aAAa,SAAS,2BAA2B;AAAA,EAAA;AAE/D;AAEO,MAAM,yBAAyB,OAAe;AAAA,EAC5C,WAAW;AAChB,UAAM,IAAI,aAAa,UAAU,gBAAgB,KAAK,KAAK,EAAE;AAAA,EAAA;AAEjE;AAEO,MAAM,kBAAkB,OAAe;AAAA,EAC5C,YAAY,OAAe;AACzB,UAAM,KAAK;AAAA,EAAA;AAAA,EAEN,YAAY;AACV,WAAA,KAAK,MAAM,YAAY;AAAA,EAAA;AAAA,EAGzB,SAAS,EAAE,SAA+B;AACzC,UAAA,SAAS,SAAS,KAAK,OAAO,EAAE,OAAO,YAAY,IAAI;AACzD,QAAA,OAAO,SAAS,MAAM;AACxB,YAAM,IAAI,aAAa,SAAS,kBAAkB,OAAO,SAAS,EAAE;AAAA,IAAA;AAElE,QAAA,OAAO,UAAU,WAAW,GAAG;AACjC,YAAM,IAAI,aAAa,SAAS,oBAAoB,KAAK,KAAK,EAAE;AAAA,IAAA;AAE5D,UAAA,EAAE,GAAG,EAAE,IAAI,IAAI,OAAO,UAAU,CAAC,CAAC;AACxC,WAAO,OAAO,MAAM,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,EAAA,CAAG;AAAA,EAAA;AAAA,EAG5D,SAAS,OAAsB;AACpC,UAAM,EAAE,OAAO,YAAY,SAAS,GAAG,SAAS,MAAM;AACtD,UAAM,SAAS,SAAS,KAAK,OAAO,KAAK;AACrC,QAAA,OAAO,SAAS,MAAM;AACxB,aAAO,KAAK;AAAA,IAAA;AAER,UAAA,UAAU,OAAO,UAAU,CAAC;AAClC,UAAM,EAAE,GAAG,GAAG,MAAM,KAAK,IAAI,IAAI,OAAO;AACxC,UAAM,WAAW;AAAA,MACf,GAAG,IAAI;AAAA,MACP,GAAG,IAAI;AAAA,MACP;AAAA,MACA;AAAA,IACF;AACA,UAAM,EAAE,IAAI,YAAY,OAAO,MAAM,aAAa,QAAQ;AAC1D,QAAI,MAAM,MAAM;AACd,aAAO,KAAK;AAAA,IAAA;AAEd,UAAM,SAAS,MAAM,KAAK,UAAU,IAAI,KAAK;AAC7C,UAAM,KAAK,KAAK,EAAE,EAAG,SAAS;AACvB,WAAA,WAAW,IAAI,UAAU;AAChC,WAAO,IAAI,OAAO,MAAM,OAAO,IAAI,OAAO;AAAA,EAAA;AAE9C;AAEO,MAAM,oBAAoB,OAAe;AAAA,EACvC,YAAY;AACV,WAAA,KAAK,MAAM,YAAY;AAAA,EAAA;AAAA,EAGzB,SAAS,EAAE,SAA+B;AACzC,UAAA,SAAS,SAAS,KAAK,OAAO,EAAE,OAAO,YAAY,IAAI;AACzD,QAAA,OAAO,SAAS,MAAM;AACxB,YAAM,IAAI,aAAa,SAAS,kBAAkB,OAAO,SAAS,EAAE;AAAA,IAAA;AAElE,QAAA,OAAO,UAAU,WAAW,GAAG;AACjC,YAAM,IAAI,aAAa,SAAS,oBAAoB,KAAK,KAAK,EAAE;AAAA,IAAA;AAE5D,UAAA,OAAO,OAAO,MAAM,YAAY,OAAO,UAAU,KAAK,GAAG,CAAC;AACzD,WAAA,OAAO,MAAM,KAAK,IAAI;AAAA,EAAA;AAAA,EAExB,SAAS,OAAsB;AACpC,UAAM,EAAE,OAAO,YAAY,SAAS,GAAG,SAAS,MAAM;AACtD,UAAM,SAAS,SAAS,KAAK,OAAO,KAAK;AACrC,QAAA,OAAO,SAAS,MAAM;AACxB,aAAO,KAAK;AAAA,IAAA;AAEd,UAAM,WAAqB,CAAC;AAC5B,aAAS,IAAI,GAAG,IAAI,OAAO,UAAU,QAAQ,KAAK;AAC1C,YAAA,UAAU,OAAO,UAAU,CAAC;AAClC,YAAM,EAAE,GAAG,GAAG,MAAM,KAAK,IAAI,IAAI,OAAO;AACxC,YAAM,WAAW;AAAA,QACf,GAAG,IAAI;AAAA,QACP,GAAG,IAAI;AAAA,QACP;AAAA,QACA;AAAA,MACF;AACA,YAAM,EAAE,IAAI,YAAY,OAAO,MAAM,aAAa,QAAQ;AAC1D,UAAI,MAAM,MAAM;AACd,eAAO,KAAK;AAAA,MAAA;AAEd,YAAM,SAAS,MAAM,KAAK,UAAU,IAAI,KAAK;AAC7C,YAAM,KAAK,KAAK,EAAE,EAAG,SAAS;AACvB,aAAA,WAAW,IAAI,UAAU;AAChC,eAAS,KAAK,OAAQ;AAAA,IAAA;AAEjB,WAAA,IAAI,OAAO,MAAM,OAAO,IAAI,SAAS,KAAK,GAAG,CAAC;AAAA,EAAA;AAEzD;AAEO,MAAM,iBAAiB,OAAe;AAAA,EACnC,MAAM,OAA4C;AACxD,QAAI,KAAK,MAAM,QAAQ,GAAG,MAAM,IAAI;AAClC,YAAM,CAAC,SAAS,EAAE,IAAI,KAAK,MAAM,MAAM,GAAG;AAC1C,YAAM,UAAU,OAAO,QAAQ,MAAM,CAAC,CAAC;AAChC,aAAA,EAAE,OAAO,MAAM,kBAAkB,OAAO,GAAI,IAAI,MAAM,IAAI,KAAK,EAAE;AAAA,IAAA;AAE1E,WAAO,EAAE,OAAO,IAAI,MAAM,KAAK,OAAO,KAAK,EAAE;AAAA,EAAA;AAAA,EAExC,SAAS,EAAE,SAAwB;AAClC,UAAA,SAAS,KAAK,MAAM,KAAK;AAC3B,QAAA,OAAO,OAAO,KAAK;AACf,YAAA,IAAI,aAAa,SAAS,0BAA0B;AAAA,IAAA;AAEtD,UAAA,EAAE,GAAG,MAAM,OAAO,MAAM,aAAa,OAAO,EAAE;AACpD,UAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;AACvC,WAAA,OAAO,MAAM,KAAK;AAAA,MACvB,KAAK;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA,CACR;AAAA,EAAA;AAAA,EAEI,QAAQ,EAAE,OAAO,SAAS,GAAG,SAAS,KAAmB;AACxD,UAAA,SAAS,KAAK,MAAM,KAAK;AAC/B,UAAM,UAAU,OAAO,MAAM,eAAe,OAAO,IAAI,QAAQ,MAAM;AACrE,QAAI,CAAC,SAAS;AACL,aAAA;AAAA,IAAA;AAET,QAAI,OAAO,MAAM,YAAY,MAAM,SAAS;AACnC,aAAA;AAAA,IAAA;AAET,WAAO,GAAG,OAAO,MAAM,YAAa,CAAA,GAAG,OAAO;AAAA,EAAA;AAAA,EAEzC,SAAS,OAAsB;AACpC,UAAM,EAAE,OAAO,YAAY,SAAS,GAAG,SAAS,MAAM;AACtD,UAAM,UAAU,KAAK,QAAQ,EAAE,OAAO,QAAQ,QAAQ;AACtD,QAAI,WAAW,QAAQ,QAAQ,SAAS,GAAG;AAClC,aAAA;AAAA,IAAA;AAET,UAAM,EAAE,SAAS,IAAA,IAAQ,SAAS,SAAS,KAAK;AAChD,QAAI,YAAY;AACV,UAAA,QAAQ,CAAC,OAAO;AAClB,cAAM,SAAS,MAAM,KAAK,UAAU,IAAI,KAAK;AAC7C,cAAM,KAAK,KAAK,EAAE,EAAG,SAAS;AACvB,eAAA,WAAW,IAAI,UAAU;AAAA,MAAA,CACjC;AAAA,IAAA;AAEH,WAAO,WAAW;AAAA,EAAA;AAEtB;AAEO,MAAM,sBAAsB,OAAe;AAAA,EACxC,MAAM,OAA+C;AAC3D,UAAMN,SAAQ,KAAK;AACnB,QAAIA,OAAM,QAAQ,GAAG,MAAM,IAAI;AAC7B,YAAM,CAAC,SAAS,OAAO,IAAIA,OAAM,MAAM,GAAG;AAC1C,YAAM,UAAU,OAAO,QAAQ,MAAM,CAAC,CAAC;AAChC,aAAA,EAAE,OAAO,MAAM,kBAAkB,OAAO,GAAI,KAAK,QAAQ,MAAM,GAAG,EAAE;AAAA,IAAA;AAE7E,WAAO,EAAE,OAAO,KAAKA,OAAM,MAAM,GAAG,EAAE;AAAA,EAAA;AAAA,EAGjC,SAAS,EAAE,SAA+B;AACzC,UAAA,SAAS,KAAK,MAAM,KAAK;AACzB,UAAA,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,MAAM,EAAE,CAAC;AAC5C,UAAM,KAAkB,CAAC;AACzB,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAC7B,YAAA,KAAK,IAAI,CAAC;AAChB,UAAI,OAAO,KAAK;AACR,cAAA,IAAI,aAAa,SAAS,0BAA0B;AAAA,MAAA;AAE5D,YAAM,IAAI,OAAO,MAAM,aAAa,EAAE;AACtC,SAAG,KAAK,CAAC;AAAA,IAAA;AAEL,UAAA,CAAC,IAAI,EAAE,IAAI;AACjB,UAAM,CAAC,KAAK,MAAM,QAAQ,KAAK,IAAI;AAAA,MACjC,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG,KAAK,OAAO,MAAM,WAAW;AAAA,MAChC,GAAG,KAAK,OAAO,MAAM,WAAW;AAAA,IAClC;AACO,WAAA,OAAO,MAAM,KAAK,EAAE,KAAK,MAAM,QAAQ,OAAO;AAAA,EAAA;AAAA,EAEhD,QAAQ,EAAE,OAAO,SAAS,GAAG,SAAS,KAAmB;AACxD,UAAA,SAAS,KAAK,MAAM,KAAK;AACzB,UAAAA,SAAQ,OAAO,IAClB,IAAI,CAAC,OAAO,MAAM,IAAI,KAAK,CAAC,EAC5B,IAAI,CAAC,OAAO,OAAO,MAAM,eAAe,IAAI,QAAQ,MAAM,KAAK,OAAO,EACtE,KAAK,GAAG;AACX,QAAI,OAAO,MAAM,YAAY,MAAM,SAAS;AACnC,aAAAA;AAAA,IAAA;AAET,WAAO,GAAG,OAAO,MAAM,YAAa,CAAA,GAAGA,MAAK;AAAA,EAAA;AAAA,EAEvC,SAAS,OAAsB;AACpC,UAAM,EAAE,OAAO,YAAY,SAAS,GAAG,SAAS,MAAM;AACtD,UAAMA,SAAQ,KAAK,QAAQ,EAAE,OAAO,QAAQ,QAAQ;AACpD,UAAM,EAAE,SAAS,IAAA,IAAQ,SAASA,QAAO,KAAK;AAC9C,QAAI,YAAY;AACV,UAAA,QAAQ,CAAC,OAAO;AAClB,cAAM,SAAS,MAAM,KAAK,UAAU,IAAI,KAAK;AAC7C,cAAM,KAAK,KAAK,EAAE,EAAG,SAAS;AACvB,eAAA,WAAW,IAAI,UAAU;AAAA,MAAA,CACjC;AAAA,IAAA;AAEI,WAAA;AAAA,EAAA;AAEX;AAEO,MAAM,eAAe;AAAA,EAK1B,YAAY,MAAc,aAAa,GAAG,OAAqB,IAAI,QAAoB;AACrF,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAAA;AAAA,EAGT,SAAS,EAAE,SAA6B;AACvC,UAAA,OAAO,KAAK,KAAK,YAAY;AAC7B,UAAA,OAAO,MAAM,YAAY,IAAI;AACnC,QAAI,QAAQ,MAAM;AAChB,YAAM,IAAI,aAAa,UAAU,qBAAqB,IAAI,EAAE;AAAA,IAAA;AAExD,UAAA,OAAO,IAAI,KAAK,EAAE,MAAM,KAAK,MAAM,OAAO,QAAQ,KAAK,OAAA,CAAQ;AACrE,WAAO,KAAK,KAAK;AAAA,EAAA;AAErB;AAYA,MAAM,OAAO,IAAI,YAAY,CAAC;AAmB9B,MAAM,0BAA0B;AAAA,EAC9B,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AACR;AAEA,MAAM,2BAA2B;AAAA,EAC/B,KAAK;AACP;AAEA,MAAM,uCAAuB,IAAI,CAAC,KAAK,MAAM,MAAM,KAAM,IAAI,CAAC;AAC9D,MAAM,gBAAoB,oBAAA,IAAI,CAAC,GAAG,kBAAkB,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAExG,MAAM,MAAM;AAAA,EAMjB,YAAY,MAAiB,QAAa,aAAa,GAAG,QAAoB;AAC5E,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,SAAS;AAAA,EAAA;AAAA,EAGT,SAAS;AACd,QAAI,KAAK,SAAS,WAAW,OAAO,KAAK,WAAW,UAAU;AACrD,aAAA,KAAK,OAAO,SAAS;AAAA,IAAA;AAE9B,WAAO,IAAI,OAAO,KAAK,MAAM,EAAE;AAAA,EAAA;AAAA,EAG1B,YAAY;AACb,QAAA,KAAK,SAAS,SAAS;AACrB,UAAA,OAAO,KAAK,WAAW,UAAU;AAC5B,eAAA,IAAI,KAAK,MAAM;AAAA,MAAA;AAEpB,UAAA,OAAO,KAAK,WAAW,WAAW;AAC7B,eAAA,KAAK,SAAS,SAAS;AAAA,MAAA;AAAA,IAChC;AAEF,WAAO,KAAK;AAAA,EAAA;AAAA,EAGP,UAAU;AACf,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACI,eAAA,IAAI,YAAY,KAAK,MAAM;AAAA,MAEpC,KAAK;AACI,eAAA,IAAI,SAAS,KAAK,MAAgB;AAAA,MAE3C,KAAK;AACI,eAAA,IAAI,cAAc,KAAK,MAAgB;AAAA,MAEhD,KAAK;AACI,eAAA,IAAI,UAAU,KAAK,MAAgB;AAAA,MAE5C,KAAK;AACI,eAAA,IAAI,YAAY,KAAK,MAAgB;AAAA,MAE9C,KAAK,kBAAkB;AACf,cAAA,OAAO,wBAAwB,KAAK,MAA8C;AACxF,eAAO,IAAI,eAAe,MAAM,KAAK,UAAU;AAAA,MAAA;AAAA,MAEjD,KAAK,mBAAmB;AAChB,cAAA,OAAO,yBAAyB,KAAK,MAA+C;AAC1F,eAAO,IAAI,eAAe,MAAM,KAAK,UAAU;AAAA,MAAA;AAAA,MAEjD,KAAK;AACI,eAAA,IAAI,eAAe,KAAK,QAAkB,GAAG,CAAC,GAAG,KAAK,MAAM;AAAA,MAErE,KAAK;AACI,eAAA,IAAI,mBAAmB,KAAK,MAAM;AAAA,MAE3C,KAAK;AACI,eAAA,IAAI,iBAAiB,KAAK,MAAgB;AAAA,IAAA;AAAA,EACrD;AAEJ;AAEA,MAAM,eAAe,CAAC,SAAiB;AAC9B,SAAA,iBAAiB,IAAI,IAAI;AAClC;AAEA,MAAM,aAAa,IAAI,MAAM,QAAQ,GAAG,GACtC,cAAc,IAAI,MAAM,SAAS,GAAG,GACpC,cAAc,IAAI,MAAM,SAAS,GAAG,GACpC,YAAY,IAAI,MAAM,kBAAkB,KAAK,CAAC,GAC9C,cAAc,IAAI,MAAM,kBAAkB,KAAK,CAAC,GAChD,eAAe,IAAI,MAAM,mBAAmB,KAAK,CAAC,GAClD,eAAe,IAAI,MAAM,kBAAkB,KAAK,CAAC,GACjD,iBAAiB,IAAI,MAAM,kBAAkB,KAAK,CAAC,GACnD,cAAc,IAAI,MAAM,kBAAkB,KAAK,CAAC,GAChD,eAAe,IAAI,MAAM,kBAAkB,KAAK,CAAC,GACjD,YAAY,IAAI,MAAM,kBAAkB,MAAM,CAAC,GAC/C,WAAW,IAAI,MAAM,kBAAkB,KAAK,CAAC,GAC7C,YAAY,IAAI,MAAM,kBAAkB,MAAM,CAAC,GAC/C,WAAW,IAAI,MAAM,kBAAkB,KAAK,CAAC,GAC7C,WAAW,IAAI,MAAM,kBAAkB,MAAM,CAAC,GAC9C,WAAW,IAAI,MAAM,kBAAkB,KAAK,CAAC;AAE/C,MAAM2B,UAAkC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM;AAOpE,MAAM,MAAM;AAAA,EAQjB,YAAY,SAAiB,SAAuB;AALpD,SAAO,SAAkB,CAAC;AAC1B,SAAO,UAAmB;AAKxB,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,SAAS,CAAC;AACf,QAAI,mCAAS,QAAQ;AACnB,WAAK,SAAS,QAAQ;AAAA,IAAA;AAGnB,SAAA,SAAQ,mCAAS,UAAS,CAAC;AAAA,EAAA;AAAA,EAG1B,eAAe;AACrB,WAAO,aAAa,KAAK,QAAQ,KAAK,KAAK,CAAC;AAAA,EAAA;AAAA,EAGtC,KAAK,OAAO,GAAG;AACrB,SAAK,SAAS;AAAA,EAAA;AAAA,EAGR,IAAI,OAAO,GAAG;AACpB,UAAM,IAAI,KAAK,QAAQ,KAAK,QAAQ,IAAI;AACjC,WAAA;AAAA,EAAA;AAAA,EAGD,SAAS,OAAO,GAAG;AACzB,WAAO,KAAK,OAAO,KAAK,OAAO,SAAS,IAAI;AAAA,EAAA;AAAA,EAGvC,4BAA4B,KAAgC;AAE7D,QAAA,QAAQ,GACV,MAAM;AAER,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AACrC,YAAA,QAAQ,KAAK,OAAO,CAAC;AACrB,YAAA,QAAQ,MAAM,OAAO;AACvB,UAAA,SAAS,OAAO,OAAO,KAAK;AAC9B,eAAO,CAAC,GAAG,QAAQ,SAAS,QAAQ,GAAG;AAAA,MAAA;AAEjC,cAAA;AAAA,IAAA;AAEH,WAAA,CAAC,IAAI,KAAK;AAAA,EAAA;AAAA,EAGZ,sBAAsB,OAAe,QAAQ,GAAqB;AACnE,QAAA,QAAQ,GACV,MAAM;AACR,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AACtB,cAAA;AACR,aAAO,KAAK,OAAO,CAAC,EAAE,OAAO;AAAA,IAAA;AAE/B,WAAO,CAAC,QAAQ,OAAO,MAAM,KAAK;AAAA,EAAA;AAAA,EAG7B,YAAY;AACV,WAAA,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,UAAW,CAAA,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAG/C,SAAS,OAA8B;AAC5C,UAAM,YAAY,KAAK,OAAO,IAAI,CAAC,MAAM;AACvC,cAAQ,EAAE,MAAM;AAAA,QACd,KAAK;AACH,cAAI,OAAO,EAAE,WAAW,YAAY,OAAO,EAAE,WAAW,WAAW;AACjE,mBAAO,EAAE;AAAA,UAAA;AAEJ,iBAAA,IAAI,EAAE,MAAM;AAAA,QAErB,KAAK;AACH,iBAAO,IAAI,SAAS,EAAE,MAAgB,EAAE,SAAS,KAAK;AAAA,QAExD,KAAK;AACH,iBAAO,IAAI,cAAc,EAAE,MAAgB,EAAE,SAAS,KAAK;AAAA,QAE7D,KAAK;AACH,iBAAO,IAAI,UAAU,EAAE,MAAgB,EAAE,SAAS,KAAK;AAAA,QAEzD,KAAK;AACH,iBAAO,IAAI,YAAY,EAAE,MAAgB,EAAE,SAAS,KAAK;AAAA,MAAA;AAE7D,aAAO,EAAE;AAAA,IAAA,CACV;AACM,WAAA,UAAU,KAAK,EAAE;AAAA,EAAA;AAAA,EAGnB,QAAQ,EAAE,SAAuB;AACtC,WAAO,KAAK,OACT,IAAI,CAAC,MAAM;AACV,cAAQ,EAAE,MAAM;AAAA,QACd,KAAK;AACH,cAAI,OAAO,EAAE,WAAW,YAAY,OAAO,EAAE,WAAW,WAAW;AACjE,mBAAO,EAAE;AAAA,UAAA;AAEJ,iBAAA,IAAI,EAAE,MAAM;AAAA,QACrB,KAAK;AACI,iBAAA,IAAI,SAAS,EAAE,MAAgB,EAAE,QAAQ,EAAE,OAAO;AAAA,QAC3D,KAAK;AACI,iBAAA,IAAI,cAAc,EAAE,MAAgB,EAAE,QAAQ,EAAE,OAAO;AAAA,MAAA;AAElE,aAAO,EAAE;AAAA,IAAA,CACV,EACA,KAAK,EAAE;AAAA,EAAA;AAAA,EAGL,WAAW;;AAChB,WAAO,KAAK,SAAS,KAAK,QAAQ,QAAQ;AACxC,WAAK,WAAW;AACZ,UAAA,OAAO,KAAK,IAAI;AACpB,WAAK,KAAK;AACV,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH;AAAA,QACF,KAAK;AACE,eAAA,OAAO,KAAK,UAAU;AAC3B;AAAA,QACF,KAAK;AACE,eAAA,OAAO,KAAK,WAAW;AAC5B;AAAA,QACF,KAAK;AACE,eAAA,OAAO,KAAK,WAAW;AAC5B;AAAA,QACF,KAAK;AACE,eAAA,OAAO,KAAK,SAAS;AAC1B;AAAA,QACF,KAAK,KAAK;AACR,gBAAM,SAAQ,UAAK,SAAS,EAAE,MAAhB,mBAAmB;AACjC,gBAAM,SAAQ,UAAK,SAAS,EAAE,MAAhB,mBAAmB;AACjC,cAAI,UAAU,oBAAqB,UAAU,WAAW,UAAU,kBAAmB;AAC9E,iBAAA,OAAO,KAAK,YAAY;AAAA,UAAA,OACxB;AACA,iBAAA,OAAO,KAAK,WAAW;AAAA,UAAA;AAE9B;AAAA,QAAA;AAAA,QAEF,KAAK;AACE,eAAA,OAAO,KAAK,YAAY;AAC7B;AAAA,QACF,KAAK;AACE,eAAA,OAAO,KAAK,cAAc;AAC/B;AAAA,QACF,KAAK;AACE,eAAA,OAAO,KAAK,WAAW;AAC5B;AAAA,QACF,KAAK;AACE,eAAA,OAAO,KAAK,YAAY;AAC7B;AAAA,QACF,KAAK;AACE,eAAA,OAAO,KAAK,QAAQ;AACzB;AAAA,QACF,KAAK;AACC,cAAA,KAAK,IAAI,MAAM,KAAK;AACtB,iBAAK,KAAK;AACL,iBAAA,OAAO,KAAK,SAAS;AAC1B;AAAA,UAAA;AAEG,eAAA,OAAO,KAAK,QAAQ;AACzB;AAAA,QACF,KAAK;AACC,cAAA,KAAK,IAAI,MAAM,KAAK;AACtB,iBAAK,KAAK;AACL,iBAAA,OAAO,KAAK,SAAS;AAC1B;AAAA,UAAA;AAEE,cAAA,KAAK,IAAI,MAAM,KAAK;AACtB,iBAAK,KAAK;AACL,iBAAA,OAAO,KAAK,QAAQ;AACzB;AAAA,UAAA;AAEG,eAAA,OAAO,KAAK,QAAQ;AACzB;AAAA,QACF,KAAK,KAAK;AACFC,gBAAAA,OAAM,KAAK,UAAU,GAAG;AAC9B,eAAK,OAAO,KAAK,IAAI,MAAM,SAASA,IAAG,CAAC;AACxC;AAAA,QAAA;AAAA,QAEF,KAAK,KAAK;AACFA,gBAAAA,OAAM,KAAK,UAAU,GAAG;AAC9B,iBAAO,IAAIA,IAAG;AACd;AAAA,QAAA;AAAA,QAEF,KAAK,KAAK;AACR,eAAK,UAAU;AACf;AAAA,QAAA;AAAA,QAGF,KAAK,KAAK;AACR,eAAK,OAAO,KAAK,IAAI,MAAM,oBAAoB,KAAK,CAAC,CAAC;AACtD;AAAA,QAAA;AAAA,MACF;AAEF,UAAI,MAAM;AAEV,aAAO,MAAM;AACL,cAAA,IAAI,KAAK,IAAI;AACnB,YAAI,MAAM,KAAK;AACR,eAAA,OAAO,KAAK,IAAI,MAAM,YAAY,KAAK,GAAG,KAAK,MAAM,GAAG,UAAU;AACvE,eAAK,KAAK;AACV;AAAA,QAAA;AAEF,YAAI,KAAK,QAAQ,cAAc,IAAI,CAAC,GAAG;AACjC,cAAA,IAAI,WAAW,GAAG;AACpB;AAAA,UAAA;AAEE,cAAA,IAAI,MAAM,qBAAqB,GAAG;AAC/B,iBAAA,OAAO,KAAK,IAAI,MAAM,SAAS,WAAW,GAAG,CAAC,CAAC;AAAA,UAAA,OAC/C;AACL,kBAAM,OAAOD,QAAM,IAAI,YAAA,CAAa;AACpC,gBAAI,QAAQ,MAAM;AAChB,mBAAK,OAAO,KAAK,IAAI,MAAM,SAAS,IAAI,CAAC;AAAA,YAChC,WAAA,IAAI,WAAW,GAAG,GAAG;AAC9B,kBAAI,IAAI,QAAQ,OAAO,MAAM,IAAI;AAC/B,qBAAK,OAAO,KAAK,IAAI,MAAM,gBAAgB,GAAG,CAAC;AAAA,cACtC,WAAA,IAAI,QAAQ,GAAG,MAAM,IAAI;AAC7B,qBAAA,OAAO,KAAK,IAAI,MAAM,YAAY,KAAK,eAAe,GAAG,CAAC,CAAC;AAAA,cAAA,OAC3D;AACL,qBAAK,OAAO,KAAK,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,cAAA;AAAA,YAE9B,WAAA,IAAI,QAAQ,GAAG,MAAM,IAAI;AAClC,mBAAK,OAAO,KAAK,IAAI,MAAM,SAAS,GAAG,CAAC;AAAA,YAAA,OACnC;AACL,kBAAI,MAAM,IAAI,IAAI,SAAS,CAAC,CAAsB,GAAG;AACnD,qBAAK,OAAO,KAAK,IAAI,MAAM,eAAe,GAAG,CAAC;AAAA,cAAA,OACzC;AACL,qBAAK,OAAO,KAAK,IAAI,MAAM,OAAO,GAAG,CAAC;AAAA,cAAA;AAAA,YACxC;AAAA,UACF;AAEF;AAAA,QAAA;AAEK,eAAA;AACP,aAAK,KAAK;AAAA,MAAA;AAAA,IACZ;AAAA,EACF;AAAA,EAEM,aAAa;AACnB,QAAI,QAAgB;AACb,WAAA,KAAK,gBAAgB;AACjB,eAAA,KAAK,QAAQ,KAAK,OAAO;AAAA,IAAA;AAEpC,QAAI,UAAU,IAAI;AAChB,WAAK,OAAO,KAAK,IAAI,MAAM,SAAS,KAAK,CAAC;AAAA,IAAA;AAAA,EAC5C;AAAA,EAGM,UAAU,QAAQ,KAAK;AAC7B,QAAI,MAAM;AAEV,WAAO,MAAM;AACL,YAAA,IAAI,KAAK,IAAI;AACnB,WAAK,KAAK;AACV,UAAI,KAAK,MAAM;AACb;AAAA,MAAA;AAEF,UAAI,MAAM,OAAO;AACf,YAAI,UAAU,OAAO,KAAK,IAAA,MAAU,OAAO;AAElC,iBAAA;AACP,eAAK,KAAK;AACV;AAAA,QAAA,WACS,UAAU,OAAO,KAAK,IAAA,MAAU,OAAO;AAEzC,iBAAA;AACP;AAAA,QAAA,OACK;AACL;AAAA,QAAA;AAAA,MACF,OACK;AACE,eAAA;AAAA,MAAA;AAAA,IACT;AAEK,WAAA;AAAA,EAAA;AAAA,EAGD,eAAe3B,QAAe;AACpC,UAAM,CAAC,SAAS,SAAS,IAAIA,OAAM,MAAM,GAAG;AACtC,UAAA,OAAO,UAAU,MAAM,GAAG;AAC1B,UAAA,2BAAW,IAAY;AAE7B,WAAO,KAAK,KAAK,KAAK,EAAE,QAAQ,CAAC,WAAW;AACpC,YAAA,QAAQ,KAAK,MAAM,MAAM;AAG/B,YAAM,QAAQ,IAAI,OAAO,UAAU,MAAM,QAAQ;AAEjD,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAChC,YAAA,KAAK,IAAI,CAAC,GAAG;AACf;AAAA,QAAA;AAGI,cAAA,MAAM,KAAK,CAAC;AAClB,cAAM,WAAW,IAAI,QAAQ,OAAO,CAAC,GAAG,QAAQ,WAAW;AACzD,iBAAO,GAAG,UAAU,EAAE,IAAI,KAAK,GAAG,UAAU,EAAE;AAAA,QAAA,CAC/C;AACD,YAAI,aAAa,KAAK;AACpB;AAAA,QAAA;AAGF,aAAK,CAAC,IAAI;AACV,aAAK,IAAI,CAAC;AAAA,MAAA;AAAA,IACZ,CACD;AACD,WAAO,GAAG,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,EAAA;AAEvC;AAEO,IAAA,WAAA,MAAM,OAAO;AAAA,EAIlB,YAAY,QAAiB;AAH7B,SAAO,QAAQ;AACf,SAAO,QAAQ;AAGb,SAAK,SAAS;AAAA,EAAA;AAAA,EAET,QAAQ;AACb,UAAM,EAAE,KAAS,IAAA,KAAK,MAAM,KAAK;AAC1B,WAAA;AAAA,EAAA;AAAA,EAGD,MAAM,eAAwB;AACpC,UAAM,QAAsB,CAAC;AACzB,QAAA;AAEE,UAAA,aAAa,CAAC,UAAU,UAAU;AACtC,UAAI,cAAc;AACV,cAAA,QAAQ,MAAM,IAAI;AACX,qBAAA,KAAK,KAAK,KAAM;AAAA,MAAA;AAE/B,aAAO,EAAE,SAAS,MAAM,MAAM,QAAQ;AAAA,IACxC;AAEA,WAAO,KAAK,OAAO,SAAS,KAAK,OAAO;AACtC,YAAM,QAAQ,KAAK,OAAO,KAAK,OAAO;AAClC,UAAA,MAAM,SAAS,SAAS;AAC1B;AAAA,MAAA;AAEE,UAAA,MAAM,SAAS,SAAS;AAC1B,YAAI,CAAC,eAAe;AACZ,gBAAA,IAAI,aAAa,WAAW,eAAe;AAAA,QAAA;AAEnD,eAAO,WAAW,IAAI;AAAA,MAAA,WAEtB,MAAM,SAAS,WACf,MAAM,SAAS,QACf,MAAM,SAAS,cACf,MAAM,SAAS,SACf,MAAM,SAAS,WACf,MAAM,SAAS,kBACf,MAAM,SAAS,eACf;AACM,cAAA,OAAO,MAAM,QAAQ;AAC3B,cAAM,KAAK,IAAK;AAAA,MAAA,WACP,MAAM,SAAS,sBAAsB,MAAM,WAAW,KAAK;AAC9D,cAAA,OAAO,MAAM,IAAI;AACvB,YAAI,CAAC,MAAM;AACH,gBAAA,IAAI,aAAa,WAAW,6BAA6B;AAAA,QAAA;AAE3D,cAAA,cAAc,IAAI,eAAe,UAAU,GAAG,CAAC,MAAM,IAAI,YAAY,GAAG,CAAC,CAAC;AAChF,cAAM,KAAK,WAAW;AAAA,MAAA,WACb,MAAM,SAAS,YAAY;AAC/B,aAAA;AACA,aAAA;AACC,cAAA,OAAO,MAAM,QAAQ;AAC3B,cAAM,KAAK,IAAI;AAEf,eAAO,MAAM;AACX,gBAAM,EAAE,MAAM,QAAA,IAAY,KAAK,MAAM,IAAI;AACzC,cAAI,MAAM;AACH,iBAAA,KAAK,KAAK,IAAI;AAAA,UAAA;AAErB,cAAI,CAAC,SAAS;AACZ;AAAA,UAAA;AAAA,QACF;AAAA,MACF,WACS,MAAM,SAAS,QAAQ;AAC3B,aAAA;AACL,cAAM,EAAE,KAAS,IAAA,KAAK,MAAM,KAAK;AACjC,cAAM,KAAK,IAAK;AAAA,MAAA,WACP,MAAM,SAAS,SAAS;AAC7B,YAAA,KAAK,YAAY,GAAG;AAChB,gBAAA,IAAI,aAAa,WAAW,sBAAsB;AAAA,QAAA;AAE1D,eAAO,WAAW;AAAA,MAAA,WACT,MAAM,SAAS,kBAAkB;AACpC,cAAA,WAAW,MAAM,QAAQ;AAC3B,YAAA,OAAO,MAAM,IAAI;AACrB,YAAI,QAAQ,MAAM;AAChB,cAAI,SAAS,SAAS,WAAW,SAAS,SAAS,OAAO;AACjD,mBAAA;AAAA,UAAA,OACF;AACC,kBAAA,IAAI,aAAa,WAAW,yBAAyB;AAAA,UAAA;AAAA,QAC7D;AAGF,YAAI,gBAAgB,MAAM;AACf,mBAAA,KAAK,KAAK,IAAI;AACvB,gBAAM,QAAQ,QAAQ;AAAA,QACb,WAAA,SAAS,aAAa,aAAa,YAAY;AAC/C,mBAAA,KAAK,KAAK,IAAI;AACV,uBAAA,KAAK,KAAK,QAAQ;AAC/B,gBAAM,QAAQ,YAAY;AAAA,QAAA,OACrB;AACC,gBAAA,QAAQ,MAAM,MAAM;AACjB,mBAAA,KAAK,KAAK,KAAM;AACZ,uBAAA,KAAK,KAAK,IAAI;AAC3B,gBAAM,QAAQ,QAAQ;AAAA,QAAA;AAET,uBAAA;AAAA,MAAA,WACN,MAAM,SAAS,mBAAmB;AACrC,cAAA,WAAW,MAAM,QAAQ;AAC/B,YAAI,cAAc;AACH,uBAAA,KAAK,KAAK,QAAQ;AAAA,QAAA,OAC1B;AACL,gBAAM,QAAQ,QAAQ;AAAA,QAAA;AAET,uBAAA;AAAA,MAAA;AAAA,IACjB;AAEF,WAAO,WAAW;AAAA,EAAA;AAEtB;AAEO,MAAM,kBAAkB,CAAC,OAAY,EAAE,OAAO,GAAG,YAA2B;AACjF,MAAI,OAAO,UAAU,YAAY,iBAAiB,QAAQ;AACxD,QAAI,MAAM,OAAO,CAAC,MAAM,KAAK;AACrB,YAAA,QAAQ,IAAI,MAAM,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO;AACrD,YAAM,SAAS;AACT,YAAA,aAAa,MAAM,SAAS,KAAK;AACvC,aAAO,MAAM;AAAA,IAAA;AAAA,EACf;AAEK,SAAA;AACT;AAEa,MAAA,iBAAiB,CAAC,cAAsB;AACnD,MAAI,UAAU,OAAO,CAAC,MAAM,KAAK;AACnB,gBAAA,UAAU,MAAM,CAAC;AAAA,EAAA;AAE/B,MAAI,UAAU,OAAO,UAAU,SAAS,CAAC,MAAM,KAAK;AACtC,gBAAA,UAAU,MAAM,GAAG,EAAE;AAAA,EAAA;AAE5B,SAAA;AACT;AAEO,SAAS,SAAS,KAAqE;AAC5F,MAAI,YAAgC;AACpC,MAAI,YAAsB,CAAC;AAEvB,MAAA,IAAI,WAAW,GAAG,GAAG;AACvB,QAAI,IAAI;AACR,QAAI,OAAO;AAEJ,WAAA,IAAI,IAAI,QAAQ;AACf,YAAA,OAAO,IAAI,CAAC;AACZ,YAAA,WAAW,IAAI,IAAI,CAAC;AAE1B,UAAI,SAAS,KAAK;AAChB,YAAI,aAAa,KAAK;AACZ,kBAAA;AACH,eAAA;AAAA,QAAA,WACI,aAAa,KAAK;AACtB,eAAA;AACL;AAAA,QAAA,OACK;AACL,iBAAO,EAAE,WAAW,QAAW,WAAW,CAAA,EAAG;AAAA,QAAA;AAAA,MAC/C,OACK;AACG,gBAAA;AACR;AAAA,MAAA;AAAA,IACF;AAGU,gBAAA;AACZ,UAAM,cAAc,IAAI,MAAM,CAAC,EAAE,KAAK;AAC1B,gBAAA,YAAY,MAAM,GAAG;AAAA,EAAA,OAC5B;AACC,UAAA,OAAO,IAAI,QAAQ,GAAG;AAC5B,QAAI,SAAS,IAAI;AACH,kBAAA,IAAI,MAAM,GAAG,IAAI;AAC7B,YAAM,cAAc,IAAI,MAAM,OAAO,CAAC,EAAE,KAAK;AACjC,kBAAA,YAAY,MAAM,GAAG;AAAA,IAAA,OAC5B;AACL,kBAAY,IAAI,OAAO,MAAM,GAAG;AAAA,IAAA;AAAA,EAClC;AAEK,SAAA,EAAE,WAAW,UAAU;AAChC;AAEO,MAAM,WAAW,CACtB,KACA,EAAE,OAAO,WAAAG,YAAW,iBAQjB;AACH,QAAM,EAAE,WAAW,cAAc,SAAS,GAAG;AAC7C,QAAM,MAAgB,CAAC;AACvB,MAAI,WAAW;AACL,YAAA,MAAM,oBAAoB,SAAS;AAC3C,QAAI,SAAS,MAAM;AACjB,aAAO,EAAE,OAAO,WAAW,WAAW,IAAI;AAAA,IAAA;AAAA,EAC5C;AAEE,MAAA,UAAU,WAAW,GAAG;AAC1B,WAAO,EAAE,OAAO,WAAW,WAAW,IAAI;AAAA,EAAA;AAE5C,QAAM,OAAiB,CAAC;AACxB,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACnC,UAAA,UAAU,UAAU,CAAC;AAC3B,UAAM,EAAE,GAAG,GAAG,MAAM,KAAK,IAAI,IAAI,OAAO;AACxC,QAAI,KAAK,MAAM,MAAM,EAAE,GAAG,GAAG;AAI7B,QAAI,OAAO,YAAY;AACrB,UAAIA,eAAc,cAAc;AAC9B,aAAK,MAAM,MAAM,EAAE,GAAG,IAAI,GAAG,GAAG;AAAA,MAAA,WACvBA,eAAc,cAAc;AACrC,aAAK,MAAM,MAAM,EAAE,GAAG,GAAG,IAAI,GAAG;AAAA,MAAA;AAAA,IAClC;AAEF,QAAI,MAAM,MAAM;AACT,WAAA,KAAK,qBAAqB,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,GAAG;AAC9D;AAAA,IAAA;AAEF,QAAI,KAAK,EAAE;AACN,SAAA,KAAK,GAAG,OAAO,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,MAAM,EAAE,EAAE;AAAA,EAAA;AAEpD,MAAA,UAAU,IAAI,MAAM,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC;AAC1C,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;ACz9BO,MAAM,yBAAyB;AAEzB,MAAA,YAAgB,oBAAA,KAAK,sBAAsB;AAExD,MAAM,QAAQ,CAAC,QAAQ,SAAS,OAAO,QAAQ,UAAU,UAAU,aAAa;AAChF,MAAM,UAAU,MAAM;AAAA,EACpB,CAAC,SAAS,CAAC,MAAY,WAAmB,MAAM,IAAI,EAAE,IAAI,QAAQ,IAAI,EAAE,OAAO;AACjF;AACA,MAAM,UAAU,MAAM;AAAA,EACpB,CAAC,SAAS,CAAC,MAAY,WAAmB,MAAM,IAAI,EAAE,SAAS,QAAQ,IAAI,EAAE,OAAO;AACtF;AAIO,MAAM,UAAU;AAAA,EAOrB,YAAY,OAAa,OAAa,SAAS,wBAAwB;AANvE,SAAO,SAAS;AACN,SAAA,OAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAMzC,SAAK,OAAO;AAAA,MACV,MAAM,YAAA,IAAgB,MAAM,YAAY;AAAA,MACxC,MAAM,SAAA,IAAa,MAAM,SAAS;AAAA,MAClC,MAAM,QAAA,IAAY,MAAM,QAAQ;AAAA,MAChC,MAAM,SAAA,IAAa,MAAM,SAAS;AAAA,MAClC,MAAM,WAAA,IAAe,MAAM,WAAW;AAAA,MACtC,MAAM,WAAA,IAAe,MAAM,WAAW;AAAA,MACtC,MAAM,oBAAoB,MAAM,gBAAgB;AAAA,IAClD;AACA,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,SAAS;AAAA,EAAA;AAAA,EAET,IAAI,MAAY;AACrB,SAAK,KAAK,QAAQ,CAAC,GAAG,MAAM;AAC1B,aAAO,QAAQ,CAAC,EAAE,MAAM,CAAC;AAAA,IAAA,CAC1B;AACM,WAAA;AAAA,EAAA;AAAA,EAEF,IAAI,MAAY;AACrB,SAAK,KAAK,QAAQ,CAAC,GAAG,MAAM;AAC1B,aAAO,QAAQ,CAAC,EAAE,MAAM,CAAC;AAAA,IAAA,CAC1B;AACM,WAAA;AAAA,EAAA;AAAA,EAGF,UAAU,QAAiB;AAChC,QAAI,UAAU,MAAM;AAClB,eAAS,KAAK;AAAA,IAAA;AAEhB,UAAM,SAAS,CAAC;AAChB,UAAM,QAAQ,KAAK,MAAM,oBAAoB,KAAK,MAAM,gBAAgB;AACpE,QAAA,QAAQ,KAAK,MAAM,YAAY,KAAK,MAAM,aAAa;AAC3D,eAAW,WAAW,CAAC,MAAM,EAAE,GAAG;AAChC,aAAO,KAAK,KAAK,MAAM,OAAO,OAAO,CAAC;AAC9B,cAAA;AAAA,IAAA;AAEH,WAAA,KAAK,MAAM,KAAK;AACvB,QAAI,SAAS;AACJ,aAAA,OAAO,QAAQ,MAAM,OAAO,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AAChE,aAAS,OAAO,QAAQ,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;AACrC,aAAA,OAAO,QAAQ,MAAM,OAAO,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,aAAA,OAAO,QAAQ,MAAM,OAAO,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,aAAA,OAAO,QAAQ,OAAO,OAAO,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACjE,aAAS,OAAO,QAAQ,MAAM,OAAO,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC;AAChF,aAAS,OAAO,QAAQ,KAAK,OAAO,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC;AACxE,WAAA;AAAA,EAAA;AAAA,EAGF,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,EAAA;AAAA,EAGjB,WAAW;AAChB,WAAO,KAAK,UAAU;AAAA,EAAA;AAAA,EAGxB,OAAO,OAAO,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,GAAG;AAC7D,UAAA,OAAa,CAAC,GAAG,GAAG,GAAG,OAAO,SAAS,SAAS,YAAY;AAClE,QAAI,OAAO;AACN,SAAA,QAAQ,CAAC,GAAG,MAAM;AACrB,aAAO,QAAQ,CAAC,EAAE,MAAM,CAAC;AAAA,IAAA,CAC1B;AACM,WAAA,IAAI,UAAU,MAAM,SAAS;AAAA,EAAA;AAAA,EAGtC,OAAO,GAAG,KAAmB;AAC3B,QAAI,eAAe,WAAW;AACrB,aAAA;AAAA,IAAA;AAEL,SAAA,2BAAK,YAAW,aAAa;AACxB,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,OAAO,KAAU;AACtB,QAAI,eAAe,WAAW;AACrB,aAAA;AAAA,IAAA;AAEL,SAAA,2BAAK,YAAW,aAAa;AACxB,aAAA,UAAU,WAAW,GAAG;AAAA,IAAA;AAEjC,WAAO,UAAU,OAAO;AAAA,EAAA;AAAA,EAE1B,OAAO,WAAW,KAAU;AACnB,WAAA,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC;AAAA,EAAA;AAAA,EAE/D,OAAO,MAAM,OAAe,SAAS,wBAAwB,SAAS,OAA8B;AAClG;AACQ,YAAA,mBAAmB,wBAAwB,MAAM;AACjD,YAAA,QAAQ,MAAM,MAAM,gBAAgB;AAC1C,UAAI,+BAAO,QAAQ;AACjB,eAAO,UAAU;AAAA,UACf,OAAO,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,UAC7C,OAAO,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,UAC7C,OAAO,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,UAC7C,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,QACnE;AAAA,MAAA;AAAA,IACF;AAEF,QAAI,QAAQ;AACV;AAAA,IAAA;AAEF;AACQ,YAAA,QAAQ,MAAM,MAAM,wBAAwB;AAClD,UAAI,OAAO;AACT,cAAM,GAAG,OAAO,OAAO,OAAO,IAAI;AAC5B,cAAA,OAAO,UAAU,MAAM,KAAK;AAC3B,eAAA,UAAU,OAAO,OAAO,OAAO,KAAK,GAAG,OAAO,OAAO,OAAO,CAAC;AAAA,MAAA;AAAA,IACtE;AAEF;AACQ,YAAA,QAAQ,MAAM,MAAM,gCAAgC;AAC1D,UAAI,OAAO;AACT,cAAM,CAAG,EAAA,OAAO,OAAO,SAAS,OAAO,IAAI;AACrC,cAAA,OAAO,UAAU,MAAM,KAAK;AAClC,eAAO,UAAU,OAAO,OAAO,OAAO,KAAK,GAAG,OAAO,OAAO,OAAO,GAAG,OAAO,OAAO,OAAO,CAAC;AAAA,MAAA;AAAA,IAC9F;AAEF;AACQ,YAAA,QAAQ,MAAM,MAAM,uCAAuC;AACjE,UAAI,OAAO;AACT,cAAM,CAAA,EAAG,OAAO,OAAO,SAAS,SAAS,KAAK,IAAI;AAC5C,cAAA,OAAO,UAAU,MAAM,KAAK;AAClC,eAAO,UAAU;AAAA,UACf,OAAO,OAAO,KAAK;AAAA,UACnB,OAAO,OAAO,OAAO;AAAA,UACrB,OAAO,OAAO,OAAO;AAAA,UACrB,OAAO,OAAO,KAAK;AAAA,QACrB;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,MAAM,gBAAoE;AAAA,EACxE,IAAI,EAAE,OAAO,MAAM,SAAS,cAAc;AAAA,EAC1C,GAAG,EAAE,OAAO,KAAK,SAAS,cAAc;AAAA,EACxC,IAAI,EAAE,OAAO,MAAM,SAAS,kBAAkB;AAAA,EAC9C,GAAG,EAAE,OAAO,KAAK,SAAS,qBAAqB;AAAA,EAC/C,IAAI,EAAE,OAAO,MAAM,SAAS,kBAAkB;AAAA,EAC9C,GAAG,EAAE,OAAO,KAAK,SAAS,qBAAqB;AAAA,EAC/C,KAAK,EAAE,OAAO,OAAO,SAAS,iBAAiB;AAAA,EAC/C,IAAI,EAAE,OAAO,MAAM,SAAS,gBAAgB;AAAA,EAC5C,GAAG,EAAE,OAAO,KAAK,SAAS,YAAY;AACxC;AAEA,SAAS,wBAAwB,QAAwB;AACvD,QAAM,eAAe,OAAO,KAAK,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;AAClF,QAAM,eAAe,IAAI,OAAO,aAAa,KAAK,GAAG,GAAG,GAAG;AAE3D,QAAM,gBAAgB,OAAO,QAAQ,0BAA0B,MAAM;AAErE,QAAM,cAAc,cAAc,QAAQ,cAAc,CAAC,UAAU;;AAC1D,aAAA,mBAAc,KAAK,MAAnB,mBAAsB,YAAW;AAAA,EAAA,CACzC;AAED,SAAO,IAAI,OAAO,IAAI,WAAW,GAAG;AACtC;AC9KA,MAAM,2BAA2B;AAIjC,MAAM,mBAEF;AAAA,EACF,MAAM,CAAC,cAAc,EAAE;AAAA,EACvB,OAAO,CAAC,cAAc,CAAC;AAAA,EACvB,IAAI,CAAC,YAAY,EAAE;AAAA,EACnB,MAAM,CAAC,YAAY,CAAC;AAAA,EACpB,MAAM,CAAC,QAAQ,CAAC;AAClB;AAEO,MAAM,SAAS;AAAA,EAKpB,YAAY,OAAkB,YAAuB;AACnD,UAAM,EAAE,eAAe,UAAU,UAAU,cAAkB,IAAA;AAC7D,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,OAAO;AACJ,YAAA,IAAI,MAAM,wBAAwB;AAAA,IAAA;AAE1C,SAAK,MAAM,wBAAwB,WAAW,aAAa,GAAG,QAAQ;AACjE,SAAA,YAAY,KAAK,iBAAiB,UAAU;AAC5C,SAAA,MAAM,KAAK,mBAAmB,UAAU;AAC7C,SAAK,QAAQ;AAAA,EAAA;AAAA,EAGf,IAAW,UAAiB;;AAC1B,UAAM,CAAC,aAAa,IAAI,IAAI,iBAAiB,KAAK,SAAS;AACrD,UAAA,SAAS,KAAK,MAAM,UAAU,EAAE,MAAM,KAAK,KAAK,eAAe,UAAU;AACzE,UAAA,WAAW,UAAU,EAAE,GAAG,KAAK,KAAK,MAAM,GAAG;AAC7C,UAAA,WAAW,UAAU,EAAE,GAAG,KAAK,KAAK,MAAM,GAAG;AAEnD,UAAM,OAA2B,CAAC;AAClC,QAAI,gBAAgB,cAAc;AAChC,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAExC,cAAM,WAAW,KAAK,kBAAkB,OAAO,CAAC,GAAG,EAAE;AACrD,iBAAS,IAAI,GAAG,IAAI,SAAS,OAAO,KAAK;AACjC,gBAAA,YAAW,YAAO,IAAI,SAAS,MAAM,MAA1B,mBAA8B,IAAI,SAAS;AACtD,gBAAA,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ;AAC1D,gBAAM,KAAK,OAAO,IAAI,IAAI,SAAS,SAAS,SAAS,QAAQ,IAAK,IAAI,SAAS,SAAU,SAAS;AAClG,gBAAM,QAAQ,EAAE,GAAG,KAAK,IAAI,MAAM,GAAG,EAAE;AACvC,gBAAM,KAAK,KAAK,MAAM,MAAM,KAAK;AACjC,gBAAM,QAAQ,SAAS,EAAE,EAAE,KAAO,EAAA;AAC5B,gBAAA,YAAY,gBAAgB,OAAO;AAAA,YACvC,YAAY;AAAA,YACZ,OAAO,KAAK;AAAA,UAAA,CACb;AACI,eAAA,IAAI,KAAK,CAAC,IAAI;AAAA,YACjB,GAAG;AAAA,YACH,OAAO;AAAA,UACT;AAAA,QAAA;AAAA,MACF;AAAA,IACF,WACS,gBAAgB,YAAY;AACrC,eAAS,IAAI,GAAG,IAAI,SAAS,OAAO,KAAK;AAEvC,cAAM,WAAW,KAAK;AAAA,UACpB,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;AAAA,UAC1B;AAAA,QACF;AACA,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAClC,gBAAA,YAAW,YAAO,IAAI,SAAS,MAAM,MAA1B,mBAA8B,IAAI,SAAS;AACtD,gBAAA,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,SAAS;AAC1D,gBAAM,KAAK,OAAO,IAAI,IAAI,SAAS,UAAU,SAAS,SAAS,IAAK,IAAI,SAAS,UAAW,SAAS;AACrG,gBAAM,QAAQ,SAAS,EAAE,EAAE,KAAO,EAAA;AAClC,eAAK,IAAI,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,UAAU,MAAM;AAAA,QAAA;AAAA,MAChE;AAAA,IACF;AAEI,UAAA,QAAQ,KAAK,MAAM,OAAO;AAAA,MAC9B;AAAA,MACA,UAAU;AAAA,MACV,gBAAgB;AAAA,QACd,SAAS,KAAK,MAAM;AAAA,QACpB,eAAe,WAAW,KAAK,GAAG;AAAA,MACpC;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,KAAK,MAAM;AAAA,QACpB,eAAe,WAAW,KAAK,GAAG;AAAA,MAAA;AAAA,IACpC,CACD;AACM,WAAA;AAAA,EAAA;AAAA,EAGT,IAAW,YAAY;AACrB,WAAO,YAAY,KAAK,KAAK,KAAK,GAAG;AAAA,EAAA;AAAA,EAGhC,aAAa,QAAmB;AAC/B,UAAA,EAAE,GAAG,EAAA,IAAM;AACjB,UAAM,QAAuB,CAAC;AAC9B,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAA,IAAU,KAAK;AAE1C,YAAQ,KAAK,WAAW;AAAA,MACtB,KAAK,QAAQ;AACX,YAAI,KAAK,IAAI,QAAQ,KAAK,KAAK,KAAK,IAAI,OAAO;AAC7C,cAAI,QAAQ,GAAG;AACb,kBAAM,YAAY;AAAA,UAAA;AAEhB,cAAA,WAAW,IAAI,GAAG;AACpB,kBAAM,YAAY;AAAA,UAAA;AAAA,QACpB;AAEF,YAAI,KAAK,IAAI,SAAS,KAAK,OAAO,KAAK,KAAK,QAAQ;AAClD,gBAAM,aAAa;AAAA,QAAA;AAErB;AAAA,MAAA;AAAA,MAEF,KAAK,SAAS;AACZ,YAAI,KAAK,IAAI,QAAQ,KAAK,KAAK,KAAK,IAAI,OAAO;AAC7C,cAAI,QAAQ,GAAG;AACb,kBAAM,YAAY;AAAA,UAAA;AAEhB,cAAA,WAAW,IAAI,GAAG;AACpB,kBAAM,YAAY;AAAA,UAAA;AAAA,QACpB;AAEE,YAAA,KAAK,IAAI,UAAU,IAAI,KAAK,OAAO,KAAK,KAAK,QAAQ;AACvD,gBAAM,aAAa;AAAA,QAAA;AAErB;AAAA,MAAA;AAAA,MAGF,KAAK,MAAM;AACT,YAAI,KAAK,IAAI,OAAO,KAAK,KAAK,KAAK,IAAI,QAAQ;AAC7C,cAAI,SAAS,GAAG;AACd,kBAAM,aAAa;AAAA,UAAA;AAEjB,cAAA,UAAU,IAAI,GAAG;AACnB,kBAAM,aAAa;AAAA,UAAA;AAAA,QACrB;AAEF,YAAI,KAAK,IAAI,QAAQ,KAAK,QAAQ,KAAK,KAAK,OAAO;AACjD,gBAAM,YAAY;AAAA,QAAA;AAEpB;AAAA,MAAA;AAAA,MAEF,KAAK,QAAQ;AACX,YAAI,KAAK,IAAI,OAAO,KAAK,KAAK,KAAK,IAAI,QAAQ;AAC7C,cAAI,SAAS,GAAG;AACd,kBAAM,aAAa;AAAA,UAAA;AAEjB,cAAA,UAAU,IAAI,GAAG;AACnB,kBAAM,aAAa;AAAA,UAAA;AAAA,QACrB;AAEE,YAAA,KAAK,IAAI,WAAW,IAAI,KAAK,QAAQ,KAAK,KAAK,OAAO;AACxD,gBAAM,YAAY;AAAA,QAAA;AAEpB;AAAA,MAAA;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAAA,EAGD,mBAAmB,oBAAyC;AAC5D,UAAA,EAAE,GAAG,EAAA,IAAM;AACjB,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAA,IAAU,KAAK;AAC1C,YAAQ,KAAK,WAAW;AAAA,MACtB,KAAK;AACH,eAAO,EAAE,KAAK,QAAQ,MAAM,GAAG,OAAO,OAAO,EAAE;AAAA,MACjD,KAAK;AACH,eAAO,EAAE,KAAK,QAAQ,MAAM,QAAQ,GAAG,OAAO,EAAE;AAAA,MAClD,KAAK;AACH,eAAO,EAAE,MAAM,OAAO,KAAK,GAAG,QAAQ,MAAM,EAAE;AAAA,MAChD,KAAK;AACH,eAAO,EAAE,MAAM,OAAO,KAAK,SAAS,GAAG,QAAQ,EAAE;AAAA,IAAA;AAErD,WAAO,KAAK;AAAA,EAAA;AAAA,EAGN,iBAAiB,YAAkC;AACzD,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAA,IAAU,KAAK;AACtC,QAAA,aAAa,GACf,WAAW;AACT,QAAA,WAAW,IAAI,MAAM;AACvB,mBAAa,WAAW,IAAI;AAAA,IAAA,WACnB,WAAW,IAAI,OAAO;AAC/B,mBAAa,WAAW,IAAI;AAAA,IAAA;AAE1B,QAAA,WAAW,IAAI,KAAK;AACtB,iBAAW,WAAW,IAAI;AAAA,IAAA,WACjB,WAAW,IAAI,QAAQ;AAChC,iBAAW,WAAW,IAAI;AAAA,IAAA;AAGxB,QAAA,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,IAAI,QAAQ,IAAI,GAAG;AACtD,UAAI,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,QAAQ,GAAG;AACtC,eAAA,aAAa,IAAI,SAAS;AAAA,MAAA;AAE5B,aAAA,WAAW,IAAI,OAAO;AAAA,IAAA;AAE/B,QAAI,eAAe,GAAG;AACb,aAAA,aAAa,IAAI,SAAS;AAAA,IAAA;AAEnC,QAAI,aAAa,GAAG;AACX,aAAA,WAAW,IAAI,OAAO;AAAA,IAAA;AAExB,WAAA;AAAA,EAAA;AAAA,EAGD,kBAAkB,OAA4B,IAAyB;AAC7E,UAAM,SAAsB,CAAC;AACvB,UAAA,SAAS,YAAY,KAAK;AAChC,UAAM,CAAC,aAAa,IAAI,IAAI,iBAAiB,KAAK,SAAS;AACpD,WAAA,QAAQ,CAAC,UAAU;AACxB,YAAM,YAAY,OAAO,IAAI,MAAM,OAAO,MAAM;AAChD,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK,SAAS;AACZ,iBAAO,KAAK,KAAK,MAAM,KAAK,CAAC;AAC7B;AAAA,QAAA;AAAA,QAEF,KAAK,WAAW;AACd,gBAAM,QAAQ,MAAM;AACpB,gBAAM,QAAQ,KAAK;AAEnB,oBAAU,kBAAkB;AAC1B,gBAAI,QAAQ;AACN,kBAAA,OAAO,MAAM,SAAS;AAC5B,mBAAO,MAAM;AACF,uBAAA;AACT,oBAAM,gBAAgB,OAAO;AAAA,gBAC3B;AAAA,gBACA,YAAY;AAAA,gBACZ,QAAQ,gBAAgB,aAAa,QAAQ;AAAA,gBAC7C,QAAQ,gBAAgB,eAAe,QAAQ;AAAA,cAAA,CAChD;AAAA,YAAA;AAAA,UACH;AAEK,iBAAA,KAAK,iBAAiB;AAC7B;AAAA,QAAA;AAAA,QAEF,KAAK,UAAU;AACT,cAAA,CAAC,MAAM,aAAa;AACtB,mBAAO,KAAK,KAAK,MAAM,KAAK,GAAG,GAAG,MAAM,MAAM,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AACjE;AAAA,UAAA;AAGF,oBAAU,iBAAiB;AACzB,gBAAI,QAAQ;AACN,kBAAA,OAAO,MAAM,eAAe;AAClC,mBAAO,MAAM;AACF,uBAAA;AACH,oBAAA;AAAA,YAAA;AAAA,UACR;AAEF,gBAAM,IAAI,eAAe;AAClB,iBAAA,KAAK,GAAG,GAAG,MAAM,MAAM,IAAI,MAAM,CAAC,CAAC;AAC1C;AAAA,QAAA;AAAA,QAEF,KAAK,QAAQ;AACL,gBAAA,OAAO,CAAC,MAAY;AACjB,mBAAA,OAAO,IAAI,MAAM,UAAU,IAAI,CAAC,IAAI,MAAM,UAAU,IAAI,CAAC;AAAA,UAClE;AACI,cAAA,CAAC,MAAM,aAAa;AACtB,mBAAO,KAAK,KAAK,MAAM,KAAK,GAAG,GAAG,MAAM,MAAM,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AACjE;AAAA,UAAA;AAGF,oBAAU,eAAe;AACvB,gBAAI,QAAQ;AACZ,mBAAO,MAAM;AACX,sBAAQ,KAAK,KAAK;AACZ,oBAAA,IAAI,KAAK,KAAK;AAAA,YAAA;AAAA,UACtB;AAEF,gBAAM,IAAI,aAAa;AAChB,iBAAA,KAAK,GAAG,GAAG,MAAM,MAAM,IAAI,MAAM,CAAC,CAAC;AAC1C;AAAA,QAAA;AAAA,QAEF,KAAK,iBAAiB;AAChB,cAAA,CAAC,MAAM,aAAa;AACtB,mBAAO,KAAK,KAAK,MAAM,KAAK,GAAG,GAAG,MAAM,MAAM,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AACjE;AAAA,UAAA;AAGF,oBAAU,uBAAuB;AAC/B,kBAAM,EAAE,OAAW,IAAA,oBAAoB,MAAM,KAAe;AAC5D,kBAAM,EAAE,QAAQ,eAAe,oBAAoB,SAAmB;AACtE,gBAAI,QAAQ;AACN,kBAAA,OAAO,MAAM,eAAe;AAClC,mBAAO,MAAM;AACF,uBAAA;AACT,oBAAM,GAAG,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC;AAAA,YAAA;AAAA,UACnC;AAEF,gBAAM,IAAI,qBAAqB;AACxB,iBAAA,KAAK,GAAG,GAAG,MAAM,MAAM,IAAI,MAAM,CAAC,CAAC;AAC1C;AAAA,QAAA;AAAA,MACF;AAAA,IACF,CACD;AACM,WAAA;AAAA,EAAA;AAEX;AAEA,UAAU,KAAK,OAAY;AACzB,SAAO,MAAM;AACL,UAAA;AAAA,EAAA;AAEV;AAIA,MAAM,sBAAsB,IAAI,OAAO,cAAc;AAErD,MAAM,sBAAsB,CAAC,UAAkB;AACvC,QAAA,QAAQ,MAAM,MAAM,mBAAmB;AAC7C,MAAI,OAAO;AACT,UAAM,CAAG,EAAA,QAAQ,CAAC,IAAI;AACtB,WAAO,EAAE,QAAQ,QAAQ,OAAO,CAAC,EAAE;AAAA,EAAA;AAErC,SAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE;AACjC;AAEA,MAAM,WAAW;AAAA,EAQf,YAAY,OAAY;AAPjB,SAAA,YAAuB,UAAU,OAAO;AAC/C,SAAO,eAAuB;AAI9B,SAAO,cAAc;AAGnB,SAAK,QAAQ;AACb,SAAK,QAAQ,CAAC;AACT,SAAA,OAAO,KAAK,aAAa,KAAK;AAAA,EAAA;AAAA,EAE7B,aAAa,OAAuB;AAC1C,UAAM,OAAO,iBAAiB,OAAO,SAAS,OAAO;AACjD,QAAA,SAAS,YAAY,SAAS,QAAQ;AACjC,aAAA;AAAA,IAAA;AAET,QAAI,SAAS,YAAY,MAAM,CAAC,MAAM,KAAK;AAClC,aAAA;AAAA,IAAA,WACE,SAAS,YAAY,MAAM,MAAM,mBAAmB,GAAG;AACzD,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,EAAA;AAAA,EAGT,IAAW,OAAO;AACZ,QAAA,KAAK,MAAM,WAAW,GAAG;AAC3B,aAAO,KAAK;AAAA,IAAA;AAEd,WAAO,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC;AAAA,EAAA;AAAA,EAGlC,IAAI,OAAoC;AACvC,UAAA,OAAO,KAAK,aAAa,KAAK;AACpC,QAAI,KAAK,SAAS,QAAQ,SAAS,WAAW,SAAS,WAAW;AACzD,aAAA,IAAI,WAAW,KAAK;AAAA,IAAA;AAEzB,QAAA,KAAK,MAAM,WAAW,GAAG;AAC3B,cAAQ,MAAM;AAAA,QACZ,KAAK,QAAQ;AACX,eAAK,YAAY,IAAI,UAAU,OAAe,KAAK,KAAa;AAChE;AAAA,QAAA;AAAA,QAEF,KAAK,UAAU;AACR,eAAA,eAAgB,QAAmB,KAAK;AAC7C;AAAA,QAAA;AAAA,QAEF,KAAK,iBAAiB;AACd,gBAAA,EAAE,QAAQ,SAAS,QAAQ,YAAY,oBAAoB,KAAK,KAAe;AACrF,gBAAM,EAAE,QAAQ,SAAS,QAAQ,QAAQ,IAAI,oBAAoB,KAAe;AAChF,cAAI,YAAY,SAAS;AACvB,iBAAK,eAAe,UAAU;AAAA,UAAA;AAEhC;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAEG,SAAA,MAAM,KAAK,KAAK;AAAA,EAAA;AAAA,EAGhB,YAAY;AACb,QAAA,KAAK,MAAM,WAAW,GAAG;AAC3B,aAAO,CAAC;AAAA,IAAA;AAGV,UAAM,OAAqB,CAAC;AAE5B,QAAI,YAAwB;AAC5B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK,QAAQ;AACL,cAAA0B,MAAK,KAAK,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,KAAK,MAAM,CAAC,EAAE,OAAO,KAAK,UAAU,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;AACvG,aAAK,cAAcA;AACnB,eAAO,CAAC;AAAA,MAAA;AAAA,MAEV,KAAK,UAAU;AACb,cAAMA,MAAK,KAAK,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,KAAK,MAAM,KAAK,QAAQ,KAAK,gBAAgB,IAAI,EAAE;AAC/F,aAAK,cAAcA;AACnB,eAAO,CAAC;AAAA,MAAA;AAAA,MAEV,KAAK,iBAAiB;AACpB,cAAM,EAAE,QAAQ,WAAA,IAAe,oBAAoB,KAAK,KAAe;AACvE,iBAAS,IAAI,GAAG,IAAI,UAAU,MAAM,QAAQ,KAAK;AACzC,gBAAA,OAAO,UAAU,MAAM,CAAC;AAC9B,gBAAM,EAAE,QAAQ,WAAW,oBAAoB,IAAc;AAC7D,cAAI,eAAe,QAAQ;AACzB,kBAAM,QAAQ,KAAK,MAAM,OAAO,GAAG,KAAK,MAAM,MAAM;AACxC,wBAAA,IAAI,WAAW,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;AAChD,kBAAM,QAAQ,UAAU,IAAI,KAAK,SAAS,CAAC;AAC3C,iBAAK,KAAK,WAAW,GAAG,UAAU,WAAW;AAC7C;AAAA,UAAA,OACK;AACL,kBAAM,EAAE,QAAQ,YAAA,IAAgB,oBAAoB,UAAU,KAAe;AAC7E,gBAAI,WAAW,eAAe,IAAI,KAAK,UAAU,cAAc;AAC7D,wBAAU,cAAc;AAAA,YAAA;AAAA,UAC1B;AAAA,QACF;AAEF;AAAA,MAAA;AAAA,IACF;AAGK,WAAA;AAAA,EAAA;AAEX;AAEA,SAAS,YAAY,OAA0C;;AAC7D,MAAI,QAAQ,IAAI,YAAW,WAAM,CAAC,MAAP,mBAAU,KAAK;AACpC,QAAA,SAAuB,CAAC,KAAK;AAEnC,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC/B,UAAA,SAAQ,WAAM,CAAC,MAAP,mBAAU;AAClB,UAAA,YAAY,MAAM,IAAI,KAAK;AACjC,QAAI,WAAW;AACb,aAAO,KAAK,SAAS;AACb,cAAA;AAAA,IAAA;AAAA,EACV;AAEF,WAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AACrCC,UAAAA,SAAQ,OAAO,CAAC;AACtB,WAAO,OAAO,IAAI,GAAG,GAAG,GAAGA,OAAM,WAAW;AAAA,EAAA;AAEvC,SAAA;AACT;AC7aA,MAAM,YAAsB,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,GAAG;AAEzE,MAAM,UAA4C,CAAC;AAMtC,MAAA,UAAU,CAAI,OAAkB,WAAkD;AACvF,QAAA,MAAiC,QAAQ,OAAO,IAAI;AAC1D,MAAI,OAAO,MAAM;AACR,WAAA;AAAA,EAAA;AAGH,QAAA,EAAE,UAAU,GAAG,aAAa,IAAI,OAAO,OAAO,OAAO,KAAK;AAChE,uCAAW;AACX,SAAO,EAAE,GAAG,OAAO,GAAG,SAAS;AACjC;AAEO,MAAM,cAAN,MAAM,YAAc;AAAA,EAApB,cAAA;AAEL,SAAQ,WAAmB;AAAA,EAAA;AAAA,EAEpB,OAAO,OAAkB,SAA+B;AACtD,WAAA;AAAA,EAAA;AAAA,EAEF,KAAK,SAAwC;AAC3C,WAAA;AAAA,MACL,MAAM,KAAK;AAAA,MACX,OAAO;AAAA,IACT;AAAA,EAAA;AAAA,EAEK,OAAO;AACZ,SAAK,WAAW,YAAW;AACnB,YAAA,KAAK,QAAQ,IAAI;AAClB,WAAA,KAAK,KAAK,KAAK,IAAI;AAAA,EAAA;AAE9B;AAjBE,YAAO,OAAO;AADT,IAAM,aAAN;AAoBP,MAAM,6BAA2D,WAAc;AAAA,EAC7E,OAAO,OAAkB,SAA+B;AACtD,UAAM,cAAc;AACd,UAAA,EAAE,eAAe,SAAA,IAAa;AAChC,QAAA,SAAS,WAAW,MAAM;AACrB,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAG,oBAAoB,SAAS,SAAS,EAAE,GAAG,OAAO,aAAa;AAAA,MAClE;AAAA,IACF;AAAA,EAAA;AAEJ;AACO,MAAM,iBAAiB,IAAI,qBAAqB,EAAE,KAAK;AAE9D,MAAM,qCAAwD,WAAc;AAAA,EAC1E,OAAO,OAAkB,SAA+B;AACtD,UAAM,sBAAsB;AACtB,UAAA,EAAE,eAAe,SAAA,IAAa;AAChC,QAAA,SAAS,WAAW,MAAM;AACrB,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAG,oBAAoB,SAAS,SAAS,EAAE,GAAG,OAAO,qBAAqB;AAAA,MAC1E;AAAA,IACF;AAAA,EAAA;AAEJ;AACO,MAAM,yBAAyB,IAAI,6BAA6B,EAAE,KAAK;AAE9E,MAAM,gCAAkD,WAAc;AAAA,EACpE,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,gBAAgB;AAAA,IAClB;AAAA,EAAA;AAEJ;AACO,MAAM,oBAAoB,IAAI,wBAAwB,EAAE,KAAK;AAEpE,MAAM,oCAAgE,WAAc;AAAA,EAClF,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,oBAAoB;AAAA,IACtB;AAAA,EAAA;AAEJ;AACO,MAAM,wBAAwB,IAAI,4BAA4B,EAAE,KAAK;AAE5E,MAAM,6BAAkD,WAAc;AAAA,EACpE,OAAO,OAAkB,SAA+B;AACtD,UAAM,WAAW,IAAI,SAAS,OAAO,OAAO;AAC5C,UAAM,QAAQ,SAAS;AACjB,UAAA,gBAAgB,WAAW,SAAS,SAAS;AAE5C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe,EAAE,SAAS,MAAM;AAAA,MAChC,GAAG,oBAAoB,OAAO,KAAK;AAAA,MACnC,GAAG,eAAe,OAAO,KAAK;AAAA,MAC9B;AAAA,MACA,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,IACtB;AAAA,EAAA;AAEJ;AACO,MAAM,iBAAiB,IAAI,qBAAqB,EAAE,KAAK;AAE9D,MAAM,qCAA6D,WAAc;AAAA,EAC/E,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,qBAAqB;AAAA,IACvB;AAAA,EAAA;AAEJ;AACO,MAAM,yBAAyB,IAAI,6BAA6B,EAAE,KAAK;AAE9E,MAAM,mCAAuE,WAAc;AAAA,EACzF,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,mBAAmB;AAAA,IACrB;AAAA,EAAA;AAEJ;AACO,MAAM,uBAAuB,IAAI,2BAA2B,EAAE,KAAK;AAE1E,MAAM,mCAAuE,WAAc;AAAA,EACzF,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,mBAAmB;AAAA,IACrB;AAAA,EAAA;AAEJ;AACO,MAAM,uBAAuB,IAAI,2BAA2B,EAAE,KAAK;AAE1E,MAAM,0BAA6C,WAAc;AAAA,EAC/D,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,UAAU;AAAA,IACZ;AAAA,EAAA;AAEJ;AACO,MAAM,cAAc,IAAI,kBAAkB,EAAE,KAAK;AAExD,MAAM,0BAA2C,WAAc;AAAA,EAC7D,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe,EAAE,SAAS,QAAQ;AAAA,MAClC,GAAG,oBAAoB,SAAS,KAAK;AAAA,MACrC,GAAG,eAAe,OAAO,OAAO;AAAA,IAClC;AAAA,EAAA;AAEJ;AACO,MAAM,cAAc,IAAI,kBAAkB,EAAE,KAAK;AAExD,MAAM,4BAAgD,WAAc;AAAA,EAClE,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,YAAY;AAAA,IACd;AAAA,EAAA;AAEJ;AACO,MAAM,gBAAgB,IAAI,oBAAoB,EAAE,KAAK;AAE5D,MAAM,oBAAuC,WAAc;AAAA,EACzD,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,UAAU;AAAA,IACZ;AAAA,EAAA;AAEJ;AACO,MAAM,cAAc,IAAI,YAAY,EAAE,KAAK;AAElD,MAAM,mBAAmC,WAAc;AAAA,EACrD,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,gBAAgB;AAAA,IAClB;AAAA,EAAA;AAEJ;AACO,MAAM,OAAO,IAAI,WAAW,EAAE,KAAK;AAE1C,MAAM,mBAAuC,WAAc;AAAA,EACzD,OAAO,OAAkB,SAA+B;AAChD,UAAA,EAAE,eAAe,SAAA,IAAa;AACpC,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,OAAO;AACH,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,MACL,GAAG;AAAA,MACH,UAAU,CAAC,EAAE,eAAeC,gBAAe;AACzC,cAAM,KAAK,SAAS;AAAA,UAClB,gBAAgB,MAAM;AAAA,UACtB,aAAa;AAAA,UACb,SAAS;AAAA,QAAA,CACV;AAAA,MAAA;AAAA,IAEL;AAAA,EAAA;AAEJ;AACO,MAAM,OAAO,IAAI,WAAW,EAAE,KAAK;AAE1C,MAAM,kBAAsC,WAAc;AAAA,EACxD,OAAO,OAAkB,SAA+B;AAChD,UAAA,EAAE,eAAe,SAAA,IAAa;AACpC,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,OAAO;AACH,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,MACL,GAAG;AAAA,MACH,UAAU,CAAC,EAAE,eAAeA,gBAAe;AACzC,cAAM,KAAK,SAAS;AAAA,UAClB,gBAAgB,MAAM;AAAA,UACtB,aAAa;AAAA,UACb,SAAS;AAAA,QAAA,CACV;AAAA,MAAA;AAAA,IAEL;AAAA,EAAA;AAEJ;AACO,MAAM,MAAM,IAAI,UAAU,EAAE,KAAK;AAExC,MAAM,oBAA+E,WAAc;AAAA,EACjG,OAAO,OAAkB,SAA+B;AACtD,UAAM,EAAE,UAAU,eAAe,eAAe,YAAgB,IAAA;AAChE,UAAM,WAAW,YAAY;AAC7B,QAAI,CAAC,UAAU;AACN,aAAA;AAAA,IAAA;AAEH,UAAA,EAAE,SAAS;AACjB,UAAM,EAAE,gBAAgB,aAAa,QAAY,IAAA;AAC3C,UAAA,WAAW,SAAS,kBAAkB,cAAc;AAEtD,QAAA,gBAAgB,WAAW,aAAa;AACtC,UAAA,cAAc,WAAW,WAAW;AACpC,UAAA,EAAE,QAAQ,UAAA,IAAc;AAE9B,QAAI,SAAS;AACX,UAAI,CAAC,UAAU;AACN,eAAA;AAAA,MAAA;AAET,YAAM,MAAM;AACZ,YAAM,EAAE,QAAQ,GAAG,OAAO,EAAE,IAAI,UAAU,WAAW;AAC/C,YAAA,MACJ,cAAc,QAAQ,KAClB;AAAA,QACE,KAAK,cAAc;AAAA,QACnB,MAAM,cAAc;AAAA,QACpB,QAAQ,cAAc,MAAM;AAAA,QAC5B,OAAO,cAAc,OAAO;AAAA,MAAA,IAE9B;AAAA,QACE,KAAK,SAAS;AAAA,QACd,MAAM,SAAS;AAAA,QACf,QAAQ,SAAS,IAAI;AAAA,QACrB,OAAO,SAAS,IAAI;AAAA,MACtB;AAEN,YAAMC,qBAAoB,aAAa,WAAW,GAAG,CAAC;AAChDC,YAAAA,YAAW,SAAS,KAAK;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,gBAAgB;AAAA,UACd,SAAS,SAAS;AAAA,UAClB,eAAeD;AAAAA,UACf;AAAA,UACA,UAAU,EAAE,gBAAgB,SAAS,SAAS,aAAa,SAAS,KAAK;AAAA,QAC3E;AAAA,QACA,gBAAgB;AAAA,UACd,SAAS,SAAS;AAAA,UAClB;AAAA,UACA,UAAU,EAAE,gBAAgB,SAAS,SAAS,aAAa,UAAU;AAAA,QAAA;AAAA,MACvE,CACD;AAEM,aAAA;AAAA,QACL,GAAG;AAAA,QACH,GAAG,oBAAoBC,WAAU,KAAK;AAAA,QACtC,eAAe,EAAE,SAASA,UAAS;AAAA,QACnC,eAAeD;AAAAA,QACf,WAAWC,UAAS,UAAU,EAAE,OAAO,UAAU,eAAe,OAAO;AAAA,QACvE,UAAU,CAAC,EAAE,eAAe,eAAe;AACzC,eAAK,SAAS;AAAA,YACZ,SAAS;AAAA,YACT,aAAa;AAAA,UAAA,CACd;AAAA,QAAA;AAAA,MAEL;AAAA,IAAA;AAGE,QAAA;AACA,QAAA,EAAE,GAAG,EAAA,IAAM;AAEX,QAAA,YAAY,QAAQ,IAAI;AACpB,YAAA,EAAE,QAAQ,UAAU,YAAY,EAAE,QAAQ,MAAM,IAAI;AAC1C,sBAAA;AAAA,QACd,KAAK;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,IAAI;AAAA,QACZ,OAAO,IAAI;AAAA,MACb;AACA,YAAMD,qBAAoB,aAAa,WAAW,aAAa,CAAC;AAChE,iBAAW,SAAS,mBAAmB;AAAA,QACrC,OAAO,EAAE,GAAG,EAAE;AAAA,QACd;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,UACd,SAAS,SAAS;AAAA,UAClB,eAAeA;AAAAA,UACf;AAAA,QACF;AAAA,QACA,gBAAgB;AAAA,UACd,SAAS,SAAS;AAAA,UAClB,eAAeA;AAAAA,UACf;AAAA,QAAA;AAAA,MACF,CACD;AAAA,IAAA,OACI;AACL,UAAI,YAAY,MAAM;AACb,eAAA;AAAA,MAAA;AAET,UAAI,EAAE,QAAQ,UAAU,UAAU,WAAW;AACzC,UAAA,cAAc,QAAQ,IAAI;AAC5B,YAAI,cAAc;AAClB,YAAI,cAAc;AACZ,cAAA,aAAa,cAAc,eAAe,WAAW;AAC3D,iBAAS,WAAW;AACpB,gBAAQ,WAAW;AAAA,MAAA;AAEL,sBAAA,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,IAAI,QAAQ,OAAO,IAAI,MAAM;AACxE,iBAAW,SAAS,KAAK;AAAA,QACvB;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA,UAAU;AAAA,QACV,gBAAgB;AAAA,UACd,SAAS,SAAS;AAAA,UAClB,UAAU,EAAE,YAAY;AAAA,UACxB;AAAA,UACA;AAAA,QACF;AAAA,QACA,gBAAgB;AAAA,UACd,SAAS,SAAS;AAAA,UAClB,UAAU,EAAE,gBAAgB,SAAS,SAAS,aAAa,UAAU;AAAA,UACrE;AAAA,UACA,eAAe,WAAW,aAAa;AAAA,QAAA;AAAA,MACzC,CACD;AAAA,IAAA;AAGH,UAAM,oBAAoB,aAAa,WAAW,aAAa,CAAC;AACzD,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe,EAAE,SAAS,SAAS;AAAA,MACnC,eAAe;AAAA,MACf,WAAW,SAAS,UAAU,EAAE,OAAO,UAAU,eAAe,OAAO;AAAA,MACvE,GAAG,oBAAoB,UAAU,KAAK;AAAA,MACtC,UAAU,CAAC,EAAE,eAAe,eAAe;AACzC,aAAK,SAAS;AAAA,UACZ,aAAa;AAAA,QAAA,CACd;AAAA,MAAA;AAAA,IAEL;AAAA,EAAA;AAEJ;AACO,MAAM,QAAQ,IAAI,YAAY,EAAE,KAAK;AAE5C,MAAM,qBAAqC,WAAc;AAAA,EACvD,OAAO,OAAkB,SAA+B;AAChD,UAAA,EAAE,eAAe,SAAA,IAAa;AAC7B,WAAA;AAAA,MACL,GAAG;AAAA,MACH,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,UAAU,CAAC,EAAE,eAAeD,gBAAe;AACzCA,kBAAS,QAAS,KAAK,SAAS;AAAA,UAC9B,aAAa;AAAA,UACb,SAAS;AAAA,QAAA,CACV;AAAA,MAAA;AAAA,IAEL;AAAA,EAAA;AAEJ;AACO,MAAM,SAAS,IAAI,aAAa,EAAE,KAAK;AAE9C,MAAM,qBAA0C,WAAc;AAAA,EAC5D,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,UAAU;AAAA,MACV,UAAU;AAAA,IACZ;AAAA,EAAA;AAEJ;AACO,MAAM,SAAS,IAAI,aAAa,EAAE,KAAK;AAE9C,MAAM,qBAAyC,WAAc;AAAA,EAC3D,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,IACtB;AAAA,EAAA;AAEJ;AACO,MAAM,SAAS,IAAI,aAAa,EAAE,KAAK;AAE9C,MAAM,yBAA0E,WAAc;AAAA,EAC5F,OAAO,OAAkB,SAA+B;AAChD,UAAA,EAAE,OAAA/B,QAAO,QAAA,IAAY;AACrB,UAAA,EAAE,OAAO,IAAA,IAAQA;AACvB,UAAM,gBAAgB;AAAA,MACpB,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AACO,WAAA;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,UAAU,EAAE,GAAG,OAAO,GAAG,EAAE;AAAA,MAC3B,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,IACtB;AAAA,EAAA;AAEJ;AACO,MAAM,aAAa,IAAI,iBAAiB,EAAE,KAAK;AAEtD,MAAM,yBAA0E,WAAc;AAAA,EAC5F,OAAO,OAAkB,SAA+B;AAChD,UAAA,EAAE,OAAAA,QAAO,QAAA,IAAY;AACrB,UAAA,EAAE,OAAO,IAAA,IAAQA;AACvB,UAAM,gBAAgB;AAAA,MACpB,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAEO,WAAA;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,UAAU,EAAE,GAAG,GAAG,GAAG,MAAM;AAAA,MAC3B,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,IACtB;AAAA,EAAA;AAEJ;AACO,MAAM,aAAa,IAAI,iBAAiB,EAAE,KAAK;AAEtD,MAAM,mBAAwC,WAAc;AAAA,EAC1D,OAAO,OAAkB,SAA+B;AACtD,UAAM,EAAE,QAAQ,OAAO,IAAI,MAAM;AACjC,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,IAChB;AACA,QAAI,WAAW,QAAQ,KAAK,WAAW,QAAQ,GAAG;AAChD,oBAAc,OAAO;AACrB,oBAAc,OAAO;AAAA,IAAA;AAEhB,WAAA,EAAE,GAAG,OAAO,cAAc;AAAA,EAAA;AAErC;AACO,MAAM,OAAO,IAAI,WAAW,EAAE,KAAK;AAE1C,MAAM,qBAAuC,WAAc;AAAA,EACzD,OAAO,OAAkB,SAA+B;AAChD,UAAA,EAAE,kBAAkB;AACtB,QAAA,EAAE,mBAAmB,SAAA,IAAa;AACjB,yBAAA;AACjB,QAAA,qBAAqB,cAAc,QAAQ;AACzB,0BAAA;AAAA,IAAA,WACX,oBAAoB,GAAG;AAChC,0BAAoB,cAAc,SAAS;AAAA,IAAA;AAGzC,QAAA,cAAc,SAAS,GAAG;AACtB,YAAA,UAAU,cAAc,iBAAiB;AAC/C,iBAAW,IAAI,OAAO;AAAA,IAAA;AAExB,WAAO,EAAE,GAAG,OAAO,eAAe,mBAAmB,SAAS;AAAA,EAAA;AAElE;AACO,MAAM,SAAS,IAAI,aAAa,EAAE,KAAK;AAE9C,MAAM,oBAAoE,WAAc;AAAA,EACtF,OAAO,OAAkB,SAA+B;AAClD,QAAA,EAAE,OAAO,MAAA,IAAU;AACvB,UAAM,EAAE,UAAU,eAAe,eAAe,SAAa,IAAA;AAC7D,QAAI,SAAS,MAAM;AACT,cAAA;AAAA,IAAA;AAEV,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,OAAO;AACH,aAAA;AAAA,IAAA;AAEH,UAAA,WAAW,MAAM,MAAM;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA,UAAU;AAAA,MAAA;AAAA,IACZ,CACD;AACM,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAG,oBAAoB,UAAU,KAAK;AAAA,MACtC,eAAe,EAAE,SAAS,SAAS;AAAA,MACnC,UAAU,CAAC,EAAE,eAAe+B,gBAAe;AACzC,cAAM,KAAK,SAAS;AAAA,UAClB,aAAa;AAAA,QAAA,CACd;AAAA,MAAA;AAAA,IAEL;AAAA,EAAA;AAEJ;AACO,MAAM,QAAQ,IAAI,YAAY,EAAE,KAAK;AAE5C,MAAM,oBAAoC,WAAc;AAAA,EACtD,OAAO,OAAkB,SAA+B;AACtD,UAAM,EAAE,UAAU,eAAe,eAAe,SAAa,IAAA;AAC7D,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,OAAO;AACH,aAAA;AAAA,IAAA;AAGL,QAAA,gBAAgB,WAAW,aAAa;AACxC,QAAA,cAAc,QAAQ,IAAI;AACtB,YAAA,EAAE,GAAG,EAAA,IAAM;AACD,sBAAA,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,EAAE;AAAA,IAAA;AAEzD,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAU,IAAA;AACrC,UAAM,OAA2B,CAAC;AAClC,QAAI,YAAY;AAChB,aAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,eAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAClC,cAAM,OAAO,MAAM,eAAe,EAAE,GAAG,KAAK,QAAQ;AACpD,cAAM,UAAU,IAAI,EAAE,GAAG,GAAG;AAC5B,YAAIG,aAAwB,6BAAM,YAAYC,KAAgB,GAAG;AAC/D;AAAA,QAAA;AAEE,aAAA,6BAAM,UAAS,MAAM;AACvB,eAAK,OAAO,IAAI,EAAE,OAAO,KAAK;AAC9B;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAEF,QAAI,cAAc,GAAG;AACZ,aAAA;AAAA,IAAA;AAET,UAAM,OAAO;AAAA,MACX;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,MACV,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MAAA;AAAA,IACF,CACD;AACM,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAG,oBAAoB,OAAO,KAAK;AAAA,MACnC,eAAe,EAAE,SAAS,MAAM;AAAA,IAClC;AAAA,EAAA;AAEJ;AACO,MAAM,QAAQ,IAAI,YAAY,EAAE,KAAK;AAE5C,MAAM,mBAAmC,WAAc;AAAA,EACrD,OAAO,OAAkB,SAA+B;AAChD,UAAA,EAAE,eAAe,SAAA,IAAa;AACpC,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,OAAO;AACH,aAAA;AAAA,IAAA;AAET,UAAM,EAAE,SAAS,aAAa,MAAM,KAAK;AACzC,QAAI,WAAW,MAAM;AACZ,aAAA;AAAA,IAAA;AAEL,QAAA,QAAQ,eAAe,MAAM,SAAS;AAClC,YAAA,EAAE,UAAU,OAAO,aAAa,MAAM,KAAK,kBAAkB,QAAQ,UAAU;AAC5E,eAAA,SAAS,EAAE,GAAG,UAAU,GAAG,QAAQ,eAAA,CAAgB,CAAC;AACtD,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAG,eAAe,OAAO,KAAK;AAAA,MAC9B,GAAG,QAAQ;AAAA,MACX,GAAG,oBAAoB,OAAO,KAAK;AAAA,MACnC,eAAe,EAAE,SAAS,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,EAAA;AAEJ;AACO,MAAM,OAAO,IAAI,WAAW,EAAE,KAAK;AAE1C,MAAM,mBAAmC,WAAc;AAAA,EACrD,OAAO,OAAkB,SAA+B;AAChD,UAAA,EAAE,eAAe,SAAA,IAAa;AACpC,UAAM,QAAQ,SAAS;AACvB,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAET,UAAM,EAAE,SAAS,UAAU,SAAS,IAAI,MAAM,KAAK;AACnD,QAAI,WAAW,MAAM;AACZ,aAAA;AAAA,IAAA;AAEL,QAAA,QAAQ,eAAe,MAAM,SAAS;AAClC,YAAA,EAAE,UAAU,OAAO,aAAa,MAAM,KAAK,kBAAkB,QAAQ,UAAU;AAC5E,eAAA,SAAS,EAAE,GAAG,UAAU,GAAG,QAAQ,eAAA,CAAgB,CAAC;AACtD,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAG,eAAe,OAAO,KAAK;AAAA,MAC9B,GAAG,QAAQ;AAAA,MACX,GAAG,oBAAoB,OAAO,KAAK;AAAA,MACnC,eAAe,EAAE,SAAS,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,EAAA;AAEJ;AACO,MAAM,OAAO,IAAI,WAAW,EAAE,KAAK;AAE1C,MAAM,oBAQI,WAAc;AAAA,EACtB,OAAO,OAAkB,SAA+B;;AACtD,UAAM,EAAE,UAAU,QAAQ,QAAQ,SAAS,YAAY;AACvD,UAAM,EAAE,UAAU,eAAe,UAAU,WAAe,IAAA;AAC1D,UAAM,QAAQ,SAAS;AACvB,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAEL,QAAA,EAAE,kBAAkB;AAClB,UAAA,EAAE,GAAG,EAAA,IAAM;AACjB,QAAI,UAAU;AACN,YAAA,CAAC,UAAU,QAAQ,IAAI;AAAA,QAC3B,cAAc,SAAS,KAAK,IAAI,cAAc;AAAA,QAC9C,cAAc,SAAS,KAAK,IAAI,cAAc;AAAA,MAChD;AACM,YAAA,CAACC,QAAOC,MAAK,IAAI,CAAC,WAAW,QAAQ,WAAW,MAAM;AAC5D,UAAID,SAAQ,KAAK,UAAUA,UAASC,SAAQ,KAAK,UAAUA,QAAO;AACzD,eAAA;AAAA,MAAA;AAGP,sBAAA,MAAMD,UAAS,MAAMC,SACjB,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,GAAG,IAC7C,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAMD,QAAO,MAAMC,OAAM;AAChD,aAAA;AAAA,QACL,GAAG;AAAA,QACH;AAAA,MACF;AAAA,IAAA;AAEI,UAAA,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,QAAQ,IAAI,MAAM;AAC9C,QAAI,QAAQ,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,OAAO;AACzD,aAAA;AAAA,IAAA;AAEL,QAAA,EAAE,GAAG,WAAW,GAAG,YAAY,QAAQ,UAAU,MAAM;AAC3D,QAAI,SAAS,GAAG;AACd,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AACjB,uBAAA,WAAM,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,MAA7C,mBAAgD,WAAU;AAAA,MAAA;AAAA,IACzE,WACS,SAAS,GAAG;AACrB,eAAS,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AACtB,uBAAA,WAAM,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,MAA7C,mBAAgD,WAAU;AAAA,MAAA;AAAA,IACzE;AAEF,QAAI,SAAS,GAAG;AACd,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAChB,wBAAA,WAAM,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,MAA7C,mBAAgD,UAAS;AAAA,MAAA;AAAA,IACzE,WACS,SAAS,GAAG;AACrB,eAAS,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AACrB,wBAAA,WAAM,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,MAA7C,mBAAgD,UAAS;AAAA,MAAA;AAAA,IACzE;AAGI,UAAA,OAAO,MAAM,eAAe,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ;AAClE,cAAS,6BAAM,WAAU;AACzB,aAAQ,6BAAM,UAAS;AAEX,gBAAA,OAAO,WAAW,SAAS,EAAE,GAAG,OAAO,GAAG,OAAO;AACtD,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,GAAG;AAAA,MAC5D,UAAU,EAAE,GAAG,OAAO,GAAG,MAAM;AAAA,MAC/B,YAAY,EAAE,GAAG,WAAW,GAAG,YAAY,QAAQ,MAAM;AAAA,IAC3D;AAAA,EAAA;AAEJ;AACO,MAAM,QAAQ,IAAI,YAAY,EAAE,KAAK;AAE5C,MAAM,mBAOI,WAAc;AAAA,EACtB,OAAO,OAAkB,SAA+B;;AAChD,UAAA,EAAE,SAAS,QAAA,IAAY;AACzB,QAAA,EAAE,QAAQ,OAAA,IAAW;AACzB,UAAM,EAAE,UAAU,eAAe,eAAe,UAAU,YAAY,iBAAiB;AACvF,UAAM,QAAQ,SAAS;AACvB,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAGL,QAAA,EAAE,GAAG,WAAW,GAAG,YAAY,QAAQ,UAAU,MAAM;AACrD,UAAA,EAAE,GAAG,EAAA,IAAM;AACX,UAAA,gBAAgB,WAAW,aAAa;AAC9C,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAU,IAAA;AACjC,QAAA,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,QAAQ,IAAI,MAAM;AACxC,QAAA,QAAQ,OAAO,QAAQ,IAAI;AAC7B,eAAS,SAAS;AACV,cAAA;AACR,UAAI,QAAQ,MAAM;AAChB;AACA;AAAA,MAAA,OACK;AACL,iBAAS,QAAQ;AACT,gBAAA;AAAA,MAAA;AAAA,IACV;AAEE,QAAA,QAAQ,UAAU,WAAW,IAAI;AACnC,eAAS,MAAM;AACP,cAAA;AACR,UAAI,QAAQ,OAAO;AACjB;AACA;AAAA,MAAA,OACK;AACL,iBAAS,OAAO;AACR,gBAAA;AAAA,MAAA;AAAA,IACV;AAEE,QAAA,QAAQ,QAAQ,SAAS,IAAI;AAC/B,eAAS,QAAQ;AACT,cAAA;AACR,UAAI,QAAQ,KAAK;AACf;AACA;AAAA,MAAA,OACK;AACL,iBAAS,SAAS;AACV,gBAAA;AAAA,MAAA;AAAA,IACV;AAEE,QAAA,QAAQ,SAAS,UAAU,IAAI;AACjC,eAAS,OAAO;AACR,cAAA;AACR,UAAI,QAAQ,QAAQ;AAClB;AACA;AAAA,MAAA,OACK;AACL,iBAAS,MAAM;AACP,gBAAA;AAAA,MAAA;AAAA,IACV;AAGF,QAAI,QAAQ,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,OAAO;AACzD,aAAA;AAAA,IAAA;AAET,QAAI,SAAS,GAAG;AACd,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AACjB,uBAAA,WAAM,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,MAA7C,mBAAgD,WAAU;AAAA,MAAA;AAAA,IACzE,WACS,SAAS,GAAG;AACrB,eAAS,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AACtB,uBAAA,WAAM,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,MAA7C,mBAAgD,WAAU;AAAA,MAAA;AAAA,IACzE;AAEF,QAAI,SAAS,GAAG;AACd,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAChB,wBAAA,WAAM,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,MAA7C,mBAAgD,UAAS;AAAA,MAAA;AAAA,IACzE,WACS,SAAS,GAAG;AACrB,eAAS,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AACrB,wBAAA,WAAM,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,MAA7C,mBAAgD,UAAS;AAAA,MAAA;AAAA,IACzE;AAEI,UAAA,OAAO,MAAM,eAAe,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ;AAClE,cAAS,6BAAM,WAAU;AACzB,aAAQ,6BAAM,UAAS;AACX,gBAAA,OAAO,aAAa,SAAS,EAAE,GAAG,OAAO,GAAG,OAAO;AACxD,WAAA;AAAA,MACL,GAAG;AAAA,MACH,UAAU,EAAE,GAAG,OAAO,GAAG,MAAM;AAAA,MAC/B,YAAY,EAAE,GAAG,WAAW,GAAG,YAAY,QAAQ,MAAM;AAAA,IAC3D;AAAA,EAAA;AAEJ;AACO,MAAM,OAAO,IAAI,WAAW,EAAE,KAAK;AAE1C,MAAM,2BAA6C,WAAc;AAAA,EAC/D,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,WAAW;AAAA,IACb;AAAA,EAAA;AAEJ;AAEO,MAAM,eAAe,IAAI,mBAAmB,EAAE,KAAK;AAE1D,MAAM,8BAAiG,WAAc;AAAA,EACnH,OAAO,OAAkB,SAA+B;AACtD,UAAM,EAAE,SAAS,GAAG,SAAa,IAAA;AACjC,UAAM,EAAE,eAAe,UAAU,eAAe,SAAa,IAAA;AAC7D,UAAM,QAAQ,SAAS;AACvB,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAET,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MAAA;AAAA,IACF,CACD;AACM,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe,EAAE,SAAS,MAAM;AAAA,IAClC;AAAA,EAAA;AAEJ;AACO,MAAM,kBAAkB,IAAI,sBAAsB,EAAE,KAAK;AAEhE,MAAM,8BAAiG,WAAc;AAAA,EACnH,OAAO,OAAkB,SAA+B;AACtD,UAAM,EAAE,SAAS,GAAG,SAAa,IAAA;AACjC,UAAM,EAAE,eAAe,UAAU,eAAe,UAAU,cAAc;AACxE,UAAM,QAAQ,SAAS;AACvB,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAET,UAAM,oBAAoB;AAAA,MACxB,GAAG;AAAA,MACH,QAAQ,cAAc,SAAS;AAAA,MAC/B,MAAM,cAAc,OAAO;AAAA,IAC7B;AACA,UAAM,eAAe,EAAE,GAAG,UAAU,GAAG,SAAS,IAAI,QAAQ;AAE5D,UAAM,WAAW;AAAA,MACf,GAAG,IAAI;AAAA,MACP;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf,eAAe;AAAA,QACf,UAAU;AAAA,MAAA;AAAA,IACZ,CACD;AACM,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe;AAAA,MACf,UAAU;AAAA,MACV,eAAe,EAAE,SAAS,MAAM;AAAA,IAClC;AAAA,EAAA;AAEJ;AACO,MAAM,kBAAkB,IAAI,sBAAsB,EAAE,KAAK;AAEhE,MAAM,6BAAgG,WAAc;AAAA,EAClH,OAAO,OAAkB,SAA+B;AACtD,UAAM,EAAE,SAAS,GAAG,SAAa,IAAA;AACjC,UAAM,EAAE,eAAe,UAAU,eAAe,UAAU,cAAc;AACxE,UAAM,QAAQ,SAAS;AACvB,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAGT,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MAAA;AAAA,IACF,CACD;AACM,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe,EAAE,SAAS,MAAM;AAAA,IAClC;AAAA,EAAA;AAEJ;AACO,MAAM,iBAAiB,IAAI,qBAAqB,EAAE,KAAK;AAE9D,MAAM,8BAAiG,WAAc;AAAA,EACnH,OAAO,OAAkB,SAA+B;AACtD,UAAM,EAAE,SAAS,GAAG,SAAa,IAAA;AACjC,UAAM,EAAE,eAAe,UAAU,eAAe,SAAa,IAAA;AAC7D,UAAM,QAAQ,SAAS;AACvB,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAET,UAAM,oBAAoB;AAAA,MACxB,GAAG;AAAA,MACH,QAAQ,cAAc,SAAS;AAAA,MAC/B,MAAM,cAAc,OAAO;AAAA,IAC7B;AACA,UAAM,eAAe,EAAE,GAAG,UAAU,GAAG,SAAS,IAAI,QAAQ;AAE5D,kBAAc,UAAU;AACxB,kBAAc,QAAQ;AAEtB,UAAM,WAAW;AAAA,MACf,GAAG,IAAI;AAAA,MACP;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf,eAAe;AAAA,QACf,UAAU;AAAA,MAAA;AAAA,IACZ,CACD;AACM,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe;AAAA,MACf,UAAU;AAAA,MACV,eAAe,EAAE,SAAS,MAAM;AAAA,IAClC;AAAA,EAAA;AAEJ;AACO,MAAM,kBAAkB,IAAI,sBAAsB,EAAE,KAAK;AAEhE,MAAM,yBAA4F,WAAc;AAAA,EAC9G,OAAO,OAAkB,SAA+B;AACtD,UAAM,EAAE,SAAS,GAAG,SAAa,IAAA;AACjC,UAAM,EAAE,eAAe,UAAU,eAAe,UAAU,cAAc;AACxE,UAAM,QAAQ,SAAS;AACvB,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAGT,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,QACA,aAAa,MAAM;AAAA,MACrB;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MAAA;AAAA,IACF,CACD;AAEM,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe,EAAE,SAAS,MAAM;AAAA,IAClC;AAAA,EAAA;AAEJ;AACO,MAAM,aAAa,IAAI,iBAAiB,EAAE,KAAK;AAEtD,MAAM,yBAA4F,WAAc;AAAA,EAC9G,OAAO,OAAkB,SAA+B;AACtD,UAAM,EAAE,SAAS,GAAG,SAAa,IAAA;AACjC,UAAM,EAAE,eAAe,UAAU,eAAe,UAAU,cAAc;AACxE,UAAM,QAAQ,SAAS;AACvB,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAGT,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,QACA,YAAY,MAAM;AAAA,MACpB;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MAAA;AAAA,IACF,CACD;AAEM,WAAA;AAAA,MACL,GAAG;AAAA,MACH,eAAe,EAAE,SAAS,MAAM;AAAA,IAClC;AAAA,EAAA;AAEJ;AACO,MAAM,aAAa,IAAI,iBAAiB,EAAE,KAAK;AAEtD,MAAM,uBAAqD,WAAc;AAAA,EACvE,OAAO,OAAkB,SAA+B;AAC/C,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EAAA;AAEJ;AACO,MAAM,WAAW,IAAI,eAAe,EAAE,KAAK;AAE3C,MAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AC5lCa,MAAA,OAAO,CAAC,UAAqB;AACxC,QAAM,EAAE,eAAe,UAAU,WAAW,eAAe,aAAa;AACxE,QAAM,QAAQ,SAAS;AAEvB,MAAI,CAAC,OAAO;AACH,WAAA,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,EAAE;AAAA,EAAA;AAG1C,QAAA,EAAE,GAAG,EAAA,IAAM;AACX,QAAA,gBAAgB,WAAW,aAAa;AAC9C,MAAI,OAAO;AACP,MAAA,KAAK,SAAS,IAAI;AACb,WAAA,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,EAAE;AAAA,EAAA;AAEhD,QAAM,QAAQ,UAAU;AAClB,QAAA,UAAU,MAAM,KAAK,IAAI;AACzB,QAAA,MAAM,UAAU,OAAO;AACvB,QAAA,OAAO,WAAW,OAAO;AAE/B,MAAI,UAAU,WAAW;AACjB,UAAA,UAAU,IAAI,KAAK,CAAC,GAAG,GAAG,EAAE,MAAM,cAAc;AAChD,UAAA,WAAW,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,aAAa;AAEvD,cAAU,UAAU,MAAM;AAAA,MACxB,IAAI,cAAc;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd,CAAA;AAAA,IAAA,CACF;AAAA,EAAA,WACQ,SAAS,MAAM;AACxB,UAAM,QAAQ;AACd,UAAM,MAAM;AACZ,UAAM,OAAO;AACb,aAAS,YAAY,MAAM;AAC3B,UAAM,QAAQ;AACd,UAAM,KAAK;AAAA,EAAA;AAEN,SAAA;AACT;AAEA,MAAM,YAAY,CAAC,UAAyB;AAC1C,QAAM,QAAkB,CAAC;AACzB,WAAS,IAAI,MAAM,KAAK,KAAK,MAAM,QAAQ,KAAK;AAC9C,UAAM,OAAiB,CAAC;AACxB,aAAS,IAAI,MAAM,MAAM,KAAK,MAAM,OAAO,KAAK;AACxC,YAAA,QAAmB,EAAE,GAAG,EAAE;AAC1B,YAAA,SAAS,MAAM,iBAAiB,KAAK;AAC3C,YAAM,QAAQ,OAAO,OAAO,EAAE,OAAO,OAAO;AAC5C,UAAI,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC9B,aAAK,KAAK,IAAI,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG;AAAA,MAAA,OACrC;AACL,aAAK,KAAK,KAAK;AAAA,MAAA;AAAA,IACjB;AAEF,UAAM,KAAK,KAAK,KAAK,GAAI,CAAC;AAAA,EAAA;AAErB,SAAA,MAAM,KAAK,IAAI;AACxB;AAEA,MAAM,aAAa,CAAC,UAAyB;AAC3C,QAAM,QAAkB,CAAC;AACzB,WAAS,IAAI,MAAM,KAAK,KAAK,MAAM,QAAQ,KAAK;AAC9C,UAAM,OAAiB,CAAC;AACxB,aAAS,IAAI,MAAM,MAAM,KAAK,MAAM,OAAO,KAAK;AACxC,YAAA,QAAmB,EAAE,GAAG,EAAE;AAC1B,YAAA,SAAS,MAAM,iBAAiB,KAAK;AAC3C,YAAM,QAAQ,OAAO,OAAO,EAAE,OAAO,OAAO;AACtC,YAAA,eAAe,MAClB,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM;AAClB,WAAA,KAAK,OAAO,YAAY,OAAO;AAAA,IAAA;AAEtC,UAAM,KAAK,OAAO,KAAK,KAAK,EAAE,CAAC,OAAO;AAAA,EAAA;AAExC,SAAO,UAAU,MAAM,KAAK,EAAE,CAAC;AACjC;ACnFa,MAAA,kBAAkB,CAAC,SAAyB;AACvD,QAAM,UAAU,KAAK,QAAQ,MAAM,IAAI;AACvC,SAAO,IAAI,OAAO;AACpB;AAEa,MAAA,iBAAiB,CAAC,SAA0B;AACvD,MAAI,MAAM;AACD,WAAA,GAAG,gBAAgB,IAAI,CAAC;AAAA,EAAA;AAE1B,SAAA;AACT;ACHa,MAAA,qBAAqB,CAAC,OAA4B,SAAiB;;AAC9E,QAAM,MAAM;AACZ,QAAM,aAAa,GAAC,cAAS,gBAAT,kCAAuB,cAAc,OAAO;AAChE,MAAI,CAAC,YAAY;AACf;AAAA,EAAA;AAEF,QAAM,aAAa,MAAM,MAAM,gBAAgB,MAAM,cAAc,KAAK;AACxE;AACF;AAQO,MAAM,YAAY,CAAC,EAAE,OAAO,KAAK,SAAS,YAAqC;;AAEhF,MAAA,GAAC,oCAAO,UAAP,mBAAc,WAAW,SAAQ,MAAM,mBAAmB,GAAG;AACzD,WAAA;AAAA,EAAA;AAET,QAAM,QAAQ,IAAI,MAAM,MAAM,MAAM,UAAU,CAAC,CAAC;AAChD,QAAM,SAAS;AACT,QAAA,CAAC,YAAY,CAAC,IAAI,MAAM,4BAA4B,MAAM,iBAAiB,CAAC;AAC9E,MAAA,QAAQ,MAAM,OAAO,UAAU;AAC/B,OAAA,+BAAO,UAAS,SAAS;AACnB,YAAA,MAAM,OAAO,aAAa,CAAC;AAAA,EAAA;AAErC,MACE,SAAS,QACT,MAAM,SAAS,UACf,MAAM,SAAS,WACf,MAAM,SAAS,oBACf,MAAM,SAAS,mBACf;AACA,QAAI,CAAC,QAAQ;AACX,yBAAmB,OAAO,GAAG;AAAA,IAAA;AAAA,EAC/B,WACS,MAAM,SAAS,SAAS,MAAM,SAAS,SAAS;AACzD,QAAI,CAAC,QAAQ;AAEX,YAAM,EAAE,WAAW,cAAc,WAAW,aAAa,IAAI,SAAS,GAAG;AACzE,YAAM,EAAE,WAAW,eAAA,IAAmB,SAAS,MAAM,MAAgB;AAErE,YAAM,iBAAiB,eAAe,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AACvD,UAAI,eAAe,WAAW,KAAK,aAAa,WAAW,GAAG;AAC/C,qBAAA,KAAK,aAAa,CAAC,CAAC;AAAA,MAAA;AAEnC,YACE,eAAe,YAAY,IAC3B,aACG,IAAI,CAAC,GAAG,MAAM;;AACb,eAAO,qBAAqB,GAAG,CAAC,GAACC,MAAA,eAAe,CAAC,MAAhB,gBAAAA,IAAmB,OAAM,CAAC,GAAC,oBAAe,CAAC,MAAhB,mBAAmB,KAAI;AAAA,MAAA,CACpF,EACA,KAAK,GAAG;AAEP,YAAA,CAAC,OAAO,GAAG,IAAI,MAAM,sBAAsB,aAAa,GAAG,CAAC;AAC5D,YAAA,kBAAkB,OAAO,GAAG;AAClC,yBAAmB,OAAO,GAAG;AAAA,IAAA;AAAA,EAC/B,OACK;AACE,WAAA;AAAA,EAAA;AAEF,SAAA;AACT;AAEa,MAAA,kBAAkB,CAAC,UAA+C;AAC7E,SAAO,UAAU,EAAE,OAAO,KAAK,IAAI,QAAQ,MAAM;AACnD;AAEa,MAAA,cAAc,CAAC,UAAsC;AAChE,MAAI,SAAS,MAAM;AACjB;AAAA,EAAA;AAEF,QAAM,MAAM,QAAQ,GAAG,MAAM,WAAW;AACxC,QAAM,MAAM,SAAS,GAAG,MAAM,YAAY;AAC5C;AAEO,MAAM,aAAa,CAAC,OAAmC,OAAc,UAAqB;;AAC/F,QAAM,QAAQ,+BAAO;AACrB,MAAI,SAAS,MAAM;AACjB;AAAA,EAAA;AAEF,QAAM,UAAQ,WAAM,eAAe,EAAE,GAAG,MAAM,GAAG,GAAG,EAAE,GAAG,QAAQ,MAAnD,mBAAsD,UAAS;AAC7E,QAAM,WAAS,WAAM,eAAe,OAAO,QAAQ,MAApC,mBAAuC,WAAU;AAC1D,QAAA,QAAQ,GAAG,KAAK;AAChB,QAAA,SAAS,GAAG,MAAM;AAC1B;AAEa,MAAA,UAAU,CAAC,UAA+C;AACrE,MAAI,OAAO,WAAW,eAAe,SAAS,MAAM;AAC3C,WAAA;AAAA,EAAA;AAET,SAAO,SAAS,kBAAkB;AACpC;ACrGO,MAAM,gBAAgB;AAAA;AAAA,EAE3B;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AACF;AChBO,MAAM,aAAa,MAAM;AAC9B,QAAM,CAAC,IAAI,KAAK,IAAI,SAAS,KAAK;AAClC,YAAU,MAAM;AACd,UAAM,IAAI;AAAA,EACZ,GAAG,EAAE;AACD,MAAA,MAAM,OAAO,WAAW,aAAa;AAChC,WAAA,EAAE,QAAQ,SAAS;AAAA,EAAA;AAE5B,SAAO,EAAE,QAAQ,MAAM,UAAU,KAAK;AACxC;AAeO,MAAM,sBAAsB,CAAC,UAAoC,QAAQ,QAAQ;AAChF,QAAA,oBAAoB,OAAO,QAAQ;AACzC,QAAM,WAAW,OAAe;AAEhC,YAAU,MAAM;AACd,sBAAkB,UAAU;AAAA,EAAA,GAC3B,CAAC,QAAQ,CAAC;AAEb,SAAO,IAAI,SAAgB;AAClB,WAAA,aAAa,SAAS,OAAO;AAC3B,aAAA,UAAU,OAAO,WAAW,MAAM;AACvB,wBAAA,QAAQ,GAAG,IAAI;AAAA,OAChC,KAAK;AAAA,EACV;AACF;AC9Ba,MAAA,QAAmB,CAAC,EAAE,UAAU,OAAO,YAAY,IAAI,GAAG,YAAY;AAC3E,QAAA,EAAE,UAAAC,UAAS,IAAI,WAAW;AAChC,MAAIA,aAAY,MAAM;AACb,WAAA;AAAA,EAAA;AAEF,SAAA;AAAA,IACL,oBAAC,SAAK,GAAG,OAAO,WAAW,YAAY,SAAS,IAAI,OACjD,SACH,CAAA;AAAA,IACAA,UAAS;AAAA,EACX;AACF;ACpBO,MAAM,YAAY,CAAC,MAAc,YAAY,UAA2B;AACvE,QAAA,SAAS,IAAI,UAAU;AAC7B,QAAM,MAAM,OAAO,gBAAgB,MAAM,WAAW;AACpD,QAAM,UAA2B,CAAC;AAE5B,QAAA,eAAe,CAAC,UAA4B;;AAC1C,UAAA,4BAAY,IAAY;AACxB,UAAA,OAAO,MAAM,iBAAiB,YAAY;AAChD,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAC9B,YAAA,MAAM,KAAK,CAAC;AACd,UAAA,IAAI,YAAY,WAAW;AAC7B,cAAM,YAAU,SAAI,gBAAJ,mBAAiB,WAAU;AAC3C,YAAI,SAAS;AACX,kBAAQ,KAAK,CAAC,EAAE,OAAO,QAAS,CAAA,CAAC;AAAA,QAAA;AAEnC;AAAA,MAAA;AAEF,YAAM,QAAQ,MAAM,KAAK,IAAI,iBAAiB,QAAQ,CAAC;AACvD,YAAM,SAAwB,CAAC;AAC/B,UAAI,IAAI;AACR,iBAAW,QAAQ,OAAO;AACxB,cAAM,UAAQ,UAAK,gBAAL,mBAAkB,WAAU;AACpC,cAAA,QAAmC,YACrC,UACC,MAAM;AACC,gBAAA,aAAa,iBAAiB,KAAK,iBAAiB;AACpD,gBAAA,cAAc,iBAAiB,IAAI;AACzC,iBAAO,EAAE,GAAG,aAAa,GAAG,WAAW;AAAA,QAAA,GACtC;AACA,eAAA,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG;AAC/B,iBAAO,KAAK,EAAE,OAAO,IAAI,OAAO,MAAM,MAAM;AAAA,QAAA;AAE9C,eAAO,KAAK,EAAE,OAAO,MAAA,CAAO;AAE5B,cAAM,UAAU,SAAS,KAAK,aAAa,SAAS,KAAK,KAAK,EAAE;AAChE,cAAM,UAAU,SAAS,KAAK,aAAa,SAAS,KAAK,KAAK,EAAE;AAChE,iBAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,mBAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,kBAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE;AAAA,UAAA;AAAA,QAC/B;AAAA,MACF;AAEF,cAAQ,KAAK,MAAM;AAAA,IAAA;AAAA,EAEvB;AAEA,QAAM,0BAA0B,CAAC,MAAYC,eAA6B,CAAA,MAAO;AAC3E,QAAA,KAAK,aAAa,KAAK,cAAc;AACvC,YAAM,KAAK;AACX,YAAM,UAAU,GAAG;AAEnB,UAAI,YAAY,SAAS;AACnBA,YAAAA,aAAY,SAAS,GAAG;AAClB,kBAAA,KAAKA,aAAY,OAAO;AAChCA,uBAAY,SAAS;AAAA,QAAA;AAEvB,qBAAa,EAAsB;AAAA,MAAA,WAC1B,YAAY,MAAM;AACnB,gBAAA,KAAKA,aAAY,OAAO;AAChCA,qBAAY,SAAS;AAAA,MACZ,WAAA,UAAU,IAAI,OAAO,GAAG;AAC7BA,YAAAA,aAAY,SAAS,GAAG;AAClB,kBAAA,KAAKA,aAAY,OAAO;AAChCA,uBAAY,SAAS;AAAA,QAAA;AAEvB,WAAG,WAAW,QAAQ,CAAC,UAAU,wBAAwB,OAAOA,YAAW,CAAC;AACxEA,YAAAA,aAAY,SAAS,GAAG;AAClB,kBAAA,KAAKA,aAAY,OAAO;AAChCA,uBAAY,SAAS;AAAA,QAAA;AAAA,MACvB,OACK;AACL,WAAG,WAAW,QAAQ,CAAC,UAAU,wBAAwB,OAAOA,YAAW,CAAC;AAAA,MAAA;AAAA,IAErE,WAAA,KAAK,aAAa,KAAK,WAAW;AACrC,YAAA,OAAO,KAAK,eAAe;AAC3B,YAAA,QAAQ,KAAK,MAAM,OAAO;AAChC,iBAAW,QAAQ,OAAO;AAClB,cAAA,UAAU,KAAK,KAAK;AAC1B,YAAI,SAAS;AACXA,uBAAY,KAAK,EAAE,OAAO,SAAS;AAAA,QAAA;AAAA,MACrC;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,cAA6B,CAAC;AAChC,MAAA,KAAK,WAAW,QAAQ,CAAC,SAAS,wBAAwB,MAAM,WAAW,CAAC;AAC5E,MAAA,YAAY,SAAS,GAAG;AAC1B,YAAQ,KAAK,WAAW;AAAA,EAAA;AAGnB,SAAA;AACT;AAEA,SAAS,iBAAiB,SAA0D;AAClF,MAAI,CAAC,SAAS;AACL,WAAA;AAAA,EAAA;AAET,QAAM,cAAc,QAAQ,aAAa,OAAO,KAAK;AACrD,QAAM,WAAgC,CAAC;AAEvC,cAAY,MAAM,GAAG,EAAE,QAAQ,CAAC,MAAM;AACpC,QAAI,CAAC,QAAQ,QAAQ,IAAI,EAAE,MAAM,GAAG;AAChC,QAAA,CAAC,UAAU,CAAC,UAAU;AACxB;AAAA,IAAA;AAEF,aAAS,OAAO,KAAK;AACjB,QAAA,WAAW,YAAY,WAAW,SAAS;AAC7C;AAAA,IAAA;AAEI,UAAA,MAAM,OAAO,KAAA,EAAO,QAAQ,aAAa,CAAC,GAAG,WAAW,OAAO,YAAA,CAAa;AAClF,QAAI,QAAQ,WAAW,QAAQ,aAAa,IAAI,WAAW,SAAS,GAAG;AACrE;AAAA,IAAA;AAEF,QAAI,QAAQ,UAAU;AACpB,aAAO,OAAO,UAAU;AAAA,QACtB,WAAW;AAAA,QACX,aAAa;AAAA,QACb,cAAc;AAAA,QACd,YAAY;AAAA,MAAA,CACb;AACD;AAAA,IAAA;AAEF,QAAI,QAAQ,eAAe;AACzB,aAAO,OAAO,UAAU;AAAA,QACtB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,mBAAmB;AAAA,QACnB,iBAAiB;AAAA,MAAA,CAClB;AACD;AAAA,IAAA;AAEF,QAAI,QAAQ,eAAe;AACzB,aAAO,OAAO,UAAU;AAAA,QACtB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,mBAAmB;AAAA,QACnB,iBAAiB;AAAA,MAAA,CAClB;AACD;AAAA,IAAA;AAEF,QAAI,QAAQ,eAAe;AACzB,aAAO,OAAO,UAAU;AAAA,QACtB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,mBAAmB;AAAA,QACnB,iBAAiB;AAAA,MAAA,CAClB;AACD;AAAA,IAAA;AAEI,UAAA,QAAQ,SAAS,KAAK;AAC3B,aAAiB,GAAG,IAAI;AAAA,EAAA,CAC1B;AAEM,SAAA;AACT;AAEO,MAAM,YAAY,CAAC,KAAa,MAAM,QAA0B;AAC/D,QAAA,IAAI,QAAQ,OAAO,IAAM;AACzB,QAAA,OAAwB,CAAC,EAAE;AAC7B,MAAA,MAAM,KAAK,CAAC;AAChB,MAAI,WAAW;AACf,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAC7B,UAAA,IAAI,IAAI,CAAC;AACX,QAAA,MAAM,QAAQ,CAAC,UAAU;AAC3B,UAAI,KAAK,EAAE,OAAO,mBAAmB,IAAI,GAAG;AACrC,aAAA;AACP,YAAM,CAAC;AACP,WAAK,KAAK,GAAG;AACb;AAAA,IAAA;AAEF,QAAI,MAAM,KAAK;AACb,UAAI,KAAK,EAAE,OAAO,mBAAmB,IAAI,GAAG;AACrC,aAAA;AACP;AAAA,IAAA;AAEF,QAAI,MAAM,OAAO,CAAC,YAAY,SAAS,IAAI;AAC9B,iBAAA;AACX;AAAA,IAAA;AAEE,QAAA,MAAM,OAAO,UAAU;AACd,iBAAA;AACX;AAAA,IAAA;AAEM,YAAA;AAAA,EAAA;AAEV,MAAI,MAAM;AACR,QAAI,KAAK,EAAE,OAAO,mBAAmB,IAAI,GAAG;AAAA,EAAA;AAEvC,SAAA;AACT;AAEA,MAAM,qBAAqB,CAAC,SAAiB,KAAK,QAAQ,SAAS,GAAG;AAEtE,MAAM,gCAAgB,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AChMM,MAAM,SAAoB,CAAC,EAAE,WAAkB;;AACpD,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AAC9C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,CAAC;AAC1C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AACxC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,EAAA,IACE;AACJ,QAAM,QAAQ,SAAS;AAEvB,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EAAA;AAGH,QAAA,SAAS,MAAM,iBAAiB,QAAQ;AACxC,QAAA,aAAa,OAAO,WAAW;AAC/B,QAAA,aAAa,UAAU,kBAAkB;AAC/C,QAAM,kBAAkB,WACrB,IAAI,CAAC,WAAW;AACf,UAAM,WAAW,OAAO,YAAY,CAAC,OAAO,OAAO,KAAK,CAAC;AACzD,QAAI,YAAY,EAAE,OAAO,IAAI,YAAY,OAAO,SAAS,GAAG;AAE5D,eAAW,WAAW,UAAU;AACxB,YAAA,eAAe,QAAQ,YAAY;AACnC,YAAA,QAAQ,aAAa,QAAQ,UAAU;AAC7C,UAAI,UAAU,IAAI;AACV,cAAA,aAAa,aAAa,WAAW,UAAU;AACrD,YACE,UAAU,UAAU,MACpB,QAAQ,UAAU,SACjB,UAAU,UAAU,SAAS,cAAc,CAAC,UAAU,YACvD;AACY,sBAAA,EAAE,OAAO,YAAY,QAAQ;AAAA,QAAA;AAAA,MAC3C;AAAA,IACF;AAGK,WAAA;AAAA,MACL;AAAA,MACA,GAAG;AAAA,MACH,cAAc,SAAS;AAAA;AAAA,IACzB;AAAA,EACD,CAAA,EACA,OAAO,CAAC,EAAE,YAAY,UAAU,EAAE,EAClC,KAAK,CAAC,GAAG,MAAM;AAEV,QAAA,EAAE,eAAe,EAAE,YAAY;AAC1B,aAAA,EAAE,aAAa,IAAI;AAAA,IAAA;AAGxB,QAAA,EAAE,UAAU,EAAE,OAAO;AAChB,aAAA,EAAE,QAAQ,EAAE;AAAA,IAAA;AAGjB,QAAA,EAAE,iBAAiB,EAAE,cAAc;AAC9B,aAAA,EAAE,eAAe,EAAE;AAAA,IAAA;AAG5B,WAAO,EAAE,QAAQ,cAAc,EAAE,OAAO;AAAA,EACzC,CAAA,EACA,IAAI,CAAC,EAAE,OAAA,MAAa,MAAM;AAE7B,YAAU,MAAM;;AACd,KAAAC,OAAAH,MAAA,uCAAW,YAAX,gBAAAA,IAAoB,UAApB,gBAAAG,IAAA,KAAAH,KAA4B,EAAE,eAAe;EAAM,GAClD,CAAC,SAAS,CAAC;AAEd,YAAU,MAAM;AACV,QAAA,MAAM,KAAK,eAAe,MAAM;AAClC;AAAA,IAAA;AAEF,QAAI,MAAM,KAAK,gBAAgB,UAAU,SAAS;AAChD;AAAA,IAAA;AAEF,QAAI,MAAM,KAAK,gBAAgB,eAAe,SAAS;AACrD;AAAA,IAAA;AAGO,aAAA,kBAAkB,EAAE,CAAC;AAAA,EAAA,GAC7B,CAAC,MAAM,KAAK,aAAa,WAAW,gBAAgB,QAAQ,CAAC;AAChE,YAAU,MAAM;AACd,UAAM,KAAK,iBAAiB;AAC5B,UAAM,KAAK,iBAAiB;AAAA,EAC3B,GAAA,CAAC,gBAAgB,OAAO,OAAO,CAAC;AAEnC,YAAU,MAAM;AAEd,gBAAY,UAAU,OAAO;AAAA,EAC5B,GAAA,CAAC,WAAW,gBAAgB,SAAS,CAAC;AAEnC,QAAA,EAAE,GAAG,EAAA,IAAM;AACjB,QAAM,QAAQ,GAAG,IAAI,CAAC,CAAC;AACjB,QAAA,QAAQ,IAAI,CAAC;AACnB,QAAM,UAAU,GAAG,KAAK,GAAG,KAAK;AAChC,QAAM,UAAU,mBAAmB;AAEnC,QAAM,OAAO,MAAM,eAAe,EAAE,GAAG,KAAK,QAAQ;AAC9C,QAAA,cAAc,MAAM,UAAU,EAAE,OAAO,UAAU,MAAM,eAAe,OAAO;AACnF,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAiB,WAAW;AAExD,QAAM,cAAc;AAAA,IAClB,CAACI,cAAqB;AACd,YAAA,SAAS,gBAAgBA,SAAQ;AACvC,UAAI,QAAQ;AACJ,cAAA,IAAI,MAAM,OAAO;AAAA,UACrB,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,OAAO,OAAO,QAAQ;AAAA,UAC3C,SAAS;AAAA,QAAA,CACV;AACD,iBAAS,YAAY,EAAE,MAAO,CAAA,CAAC;AACtB,iBAAA,kBAAkB,EAAE,CAAC;AACrB,iBAAA,aAAa,EAAE,CAAC;AACzB,oBAAY,CAAC;AAAA,MAAA;AAAA,IAEjB;AAAA,IACA,CAAC,iBAAiB,OAAO,OAAO;AAAA,EAClC;AAEA,YAAU,MAAM;AACd,cAAU,WAAW;AACZ,aAAA,aAAa,WAAW,CAAC;AACvB,eAAA,UAAU,SAAS,OAAO,QAAQ;AAAA,EAAA,GAC5C,CAAC,UAAU,aAAa,UAAU,WAAW,KAAK,CAAC;AAEtD,QAAM,EAAE,GAAG,KAAK,GAAG,MAAM,QAAQ,UAAU;AAE3C,QAAM,YAAY;AAAA,IAChB,CAAC,UAAkB;AACjB,UAAI,WAAW,OAAO;AACpB,iBAAS,MAAM,EAAE,MAAM,CAAC,CAAC;AAAA,MAAA;AAE3B,gBAAU,KAAK;AAAA,IACjB;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,QAAM,WAAW,YAAY,MAAM,IAAI,EAAE;AACzC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAAkC;;AACjC,UAAI,WAAW;AACb;AAAA,MAAA;AAGF,UAAI,EAAE,EAAE,QAAQ,UAAU,EAAE,QAAQ,YAAY;AAC9C,qBAAa,IAAI;AACjB,8BAAsB,MAAM;AAC1B,uBAAa,KAAK;AAAA,QAAA,CACnB;AAAA,MAAA;AAEH,YAAM,QAAQ,EAAE;AAEhB,YAAMC,YAAW,EAAE;AACnB,cAAQ,EAAE,KAAK;AAAA,QACb,KAAK;AACH,YAAE,eAAe;AACjB,cAAI,SAAS;AACX,gBAAI,gBAAgB,QAAQ;AAC1B,0BAAY,QAAQ;AAAA,YAAA,OACf;AACL,wBAAU,MAAM,KAAK;AACZ,uBAAA,kBAAkB,EAAE,CAAC;AACrB,uBAAA,aAAa,EAAE,CAAC;AAAA,YAAA;AAAA,UAC3B;AAEF;AAAA,YACE,KAAK;AAAA,cACH,SAAS,MAAM,WAAW;AAAA,cAC1B,SAAS,MAAM,WAAW;AAAA,cAC1B,QAAQ;AAAA,cACR,QAAQA,YAAW,KAAK;AAAA,YACzB,CAAA;AAAA,UACH;AACS,mBAAA,kBAAkB,EAAE,CAAC;AACvB,iBAAA;AAAA,QAET,KAAK;AACH,cAAI,SAAS;AACX,gBAAI,EAAE,QAAQ;AACZ,iCAAmB,OAAO,IAAI;AACrB,uBAAA,aAAa,MAAM,KAAK,CAAC;AAClC,gBAAE,eAAe;AACV,qBAAA;AAAA,YAAA,OACF;AACD,kBAAA,EAAE,YAAY,aAAa;AACtB,uBAAA;AAAA,cAAA;AAET,kBAAI,gBAAgB,QAAQ;AAC1B,4BAAY,QAAQ;AAAA,cAAA,OACf;AACL,0BAAU,MAAM,KAAK;AACZ,yBAAA,kBAAkB,EAAE,CAAC;AACrB,yBAAA,aAAa,EAAE,CAAC;AAAA,cAAA;AAAA,YAC3B;AAAA,UAEO,WAAA,kBAAkB,cAAc,SAAS,IAAI;AAChD,kBAAA,WAAW,SAAS,YAAY,aAAa;AAC1C,qBAAA,UAAU,YAAY,MAAM,IAAI;AACzC,kBAAM,cAAc,QAAQ;AAC5B,cAAE,eAAe;AACV,mBAAA;AAAA,UAAA;AAET;AAAA,YACE,KAAK;AAAA,cACH,SAAS,MAAM,WAAW;AAAA,cAC1B,SAAS,MAAM,WAAW;AAAA,cAC1B,QAAQA,YAAW,KAAK;AAAA,cACxB,QAAQ;AAAA,YACT,CAAA;AAAA,UACH;AACA,YAAE,eAAe;AACV,iBAAA;AAAA,QAET,KAAK;AACH,cAAI,CAAC,SAAS;AACH,qBAAA,MAAM,IAAI,CAAC;AACX,qBAAA,aAAa,EAAE,CAAC;AAClB,mBAAA;AAAA,UAAA;AAET;AAAA,QACF,KAAK;AACH,sBAAY,IAAI;AACT,iBAAA;AAAA,QAET,KAAK;AACI,iBAAA;AAAA,QAET,KAAK;AACI,iBAAA;AAAA,QAET,KAAK;AACI,iBAAA;AAAA,QAET,KAAK;AACI,iBAAA;AAAA,QAET,KAAK;AACM,mBAAA,OAAO,IAAI,CAAC;AACZ,mBAAA,eAAe,MAAS,CAAC;AACzB,mBAAA,aAAa,MAAM,CAAC;AAEtB,iBAAA;AAAA,QAET,KAAK;AACH,cAAI,CAAC,SAAS;AACZ;AAAA,cACE,MAAM;AAAA,gBACJ,UAAAA;AAAAA,gBACA,SAAS,MAAM,WAAW;AAAA,gBAC1B,SAAS,MAAM,WAAW;AAAA,gBAC1B,QAAQ;AAAA,gBACR,QAAQ;AAAA,cACT,CAAA;AAAA,YACH;AACO,mBAAA;AAAA,UAAA;AAET;AAAA,QACF,KAAK;AACH,cAAI,CAAC,SAAS;AACZ;AAAA,cACE,MAAM;AAAA,gBACJ,UAAAA;AAAAA,gBACA,SAAS,MAAM,WAAW;AAAA,gBAC1B,SAAS,MAAM,WAAW;AAAA,gBAC1B,QAAQ;AAAA,gBACR,QAAQ;AAAA,cACT,CAAA;AAAA,YACH;AACO,mBAAA;AAAA,UAAA;AAEL,cAAA,gBAAgB,SAAS,GAAG;AAC9B,gBAAI,YAAY,GAAG;AACL,0BAAA,gBAAgB,SAAS,CAAC;AAAA,YAAA,OACjC;AACL,0BAAY,WAAW,CAAC;AAAA,YAAA;AAEnB,mBAAA;AAAA,UAAA;AAET;AAAA,QACF,KAAK;AACH,cAAI,CAAC,SAAS;AACZ;AAAA,cACE,MAAM;AAAA,gBACJ,UAAAA;AAAAA,gBACA,SAAS,MAAM,WAAW;AAAA,gBAC1B,SAAS,MAAM,WAAW;AAAA,gBAC1B,QAAQ;AAAA,gBACR,QAAQ;AAAA,cACT,CAAA;AAAA,YACH;AACO,mBAAA;AAAA,UAAA;AAET;AAAA,QACF,KAAK;AACH,cAAI,CAAC,SAAS;AACZ;AAAA,cACE,MAAM;AAAA,gBACJ,UAAAA;AAAAA,gBACA,SAAS,MAAM,WAAW;AAAA,gBAC1B,SAAS,MAAM,WAAW;AAAA,gBAC1B,QAAQ;AAAA,gBACR,QAAQ;AAAA,cACT,CAAA;AAAA,YACH;AACO,mBAAA;AAAA,UAAA;AAEL,cAAA,gBAAgB,SAAS,GAAG;AAC1B,gBAAA,YAAY,gBAAgB,SAAS,GAAG;AAC1C,0BAAY,CAAC;AAAA,YAAA,OACR;AACL,0BAAY,WAAW,CAAC;AAAA,YAAA;AAEnB,mBAAA;AAAA,UAAA;AAET;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AAC1B,gBAAI,CAAC,SAAS;AACZ,gBAAE,eAAe;AACjB;AAAA,gBACE,OAAO;AAAA,kBACL,QAAQ;AAAA,kBACR,QAAQ;AAAA,kBACR,MAAM,MAAM,WAAW;AAAA,kBACvB,MAAM,MAAM,WAAW;AAAA,gBACxB,CAAA;AAAA,cACH;AACO,qBAAA;AAAA,YAAA;AAAA,UACT;AAEF;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AAC1B,gBAAI,CAAC,SAAS;AACZ,gBAAE,eAAe;AACX,oBAAA,OAAO,KAAK,KAAK;AACvB,uBAAS,KAAK,WAAW,IAAI,CAAC,CAAC;AAC/B,oBAAM,MAAM;AACL,qBAAA;AAAA,YAAA;AAEF,mBAAA;AAAA,UAAA;AAET;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AAC1B,gBAAI,CAAC,SAAS;AACZ,gBAAE,eAAe;AACb,kBAAA,OAAO,gBAAgB,aAAa;AAC7B,yBAAA,eAAe,EAAE,CAAC;AAAA,cAAA;AAEpB,uBAAA,YAAY,KAAK,CAAC;AAC3B,oCAAsB,MAAM,eAAe,QAAS,MAAA,CAAO;AACpD,qBAAA;AAAA,YAAA;AAAA,UACT;AAEF;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AAC1B,gBAAI,CAAC,SAAS;AACZ,gBAAE,eAAe;AACR,uBAAA,KAAK,IAAI,CAAC;AACnB,oCAAsB,MAAM,SAAS,aAAa,EAAE,CAAC,CAAC;AAC/C,qBAAA;AAAA,YAAA;AAAA,UACT;AAEF;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AAC1B,gBAAI,CAAC,SAAS;AACZ,gBAAE,eAAe;AACjB,eAAAF,OAAAH,MAAA,MAAM,MAAK,WAAX,gBAAAG,IAAA,KAAAH,KAAoB;AAAA,gBAClB;AAAA,gBACA,QAAQ;AAAA,kBACN,UAAU;AAAA,kBACV,eAAe;AAAA,oBACb,GAAG,cAAc;AAAA,oBACjB,GAAG,cAAc;AAAA,kBACnB;AAAA,kBACA,aAAa;AAAA,oBACX,GAAG,cAAc;AAAA,oBACjB,GAAG,cAAc;AAAA,kBAAA;AAAA,gBACnB;AAAA,cACF;AAEK,qBAAA;AAAA,YAAA;AAAA,UACT;AAEF;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AAE1B,cAAE,gBAAgB;AACX,mBAAA;AAAA,UAAA;AAET;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AAC1B,gBAAI,CAAC,SAAS;AACZ,gBAAE,eAAe;AACX,oBAAA,OAAO,KAAK,KAAK;AACvB,uBAAS,IAAI,WAAW,IAAI,CAAC,CAAC;AAC9B,oBAAM,MAAM;AAEL,qBAAA;AAAA,YAAA;AAAA,UACT;AAEF;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AAC1B,gBAAI,CAAC,SAAS;AACZ,gBAAE,eAAe;AACjB,kBAAI,EAAE,UAAU;AACL,yBAAA,KAAK,IAAI,CAAC;AAAA,cAAA,OAEd;AACI,yBAAA,KAAK,IAAI,CAAC;AAAA,cAAA;AAEd,qBAAA;AAAA,YAAA;AAAA,UACT;AAEF;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AAC1B,gBAAI,CAAC,SAAS;AACZ,gBAAE,eAAe;AAEjB,yBAAc,oBAAA,KAAO,GAAA,aAAA,CAAc;AAAA,YAAA;AAAA,UACrC;AAEF;AAAA,MAAA;AAEA,UAAA,EAAE,WAAW,EAAE,SAAS;AACnB,eAAA;AAAA,MAAA;AAET,UAAIJ,aAAwB,6BAAM,YAAYC,KAAgB,GAAG;AAC/D,gBAAQ,KAAK,sCAAsC;AAC5C,eAAA;AAAA,MAAA;AAEA,eAAA,kBAAkB,OAAO,CAAC;AACnC,UAAI,CAAC,SAAS;AACH,iBAAA,aAAa,EAAE,CAAC;AAAA,MAAA;AAE3B,kBAAY,CAAC;AACN,aAAA;AAAA,IACT;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,cAAc;AAAA,IAClB,CAAC,MAA6C;AACtC,YAAA,KAAK,cAAc,EAAE;AAAA,IAC7B;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAEA,QAAM,oBAAoB;AAAA,IACxB,CAAC,MAA6C;AAC5C,UAAID,aAAwB,6BAAM,YAAYC,KAAgB,GAAG;AAC/D,gBAAQ,KAAK,sCAAsC;AACnD;AAAA,MAAA;AAEF,YAAM,QAAQ,EAAE;AAChB,UAAI,CAAC,SAAS;AACH,iBAAA,aAAa,WAAW,CAAC;AACzB,iBAAA,kBAAkB,OAAO,CAAC;AACnC,8BAAsB,MAAM;AAC1B,gBAAM,MAAM,QAAQ,GAAG,MAAM,WAAW;AACxC,gBAAM,MAAM,SAAS,GAAG,MAAM,YAAY;AAC1C,gBAAM,SAAS,IAAI,OAAO,WAAW,EAAE;AACjC,gBAAA,kBAAkB,QAAQ,MAAM;AAAA,QAAA,CACvC;AAAA,MAAA;AAAA,IAEL;AAAA,IACA,CAAC,MAAM,SAAS,aAAa,OAAO;AAAA,EACtC;AAEA,QAAM,aAAa;AAAA,IACjB,CAAC,MAA6C;AACxC,UAAA,gBAAgB,EAAE,aAAa,GAAG;AAC7B,eAAA;AAAA,MAAA,OACF;AACL,YAAI,SAAS;AACD,oBAAA,EAAE,cAAc,KAAK;AAAA,QAAA;AAAA,MACjC;AAEO,eAAA,kBAAkB,EAAE,CAAC;AAAA,IAChC;AAAA,IACA,CAAC,SAAS,SAAS;AAAA,EACrB;AAEA,QAAM,eAAe;AAAA,IACnB,CAAC,MAA8C;AAC7C,UAAID,aAAwB,6BAAM,YAAYC,KAAgB,GAAG;AAC/D;AAAA,MAAA;AAEF,eAAS,aAAa,EAAE,cAAc,KAAK,CAAC;AAC5C,kBAAY,CAAC;AAAA,IACf;AAAA,IACA,CAAC,IAAI;AAAA,EACP;AAEA,QAAM,cAAc;AAAA,IAClB,CAAC,MAAiD;;AAChD,UAAI,SAAS;AACJ,eAAA;AAAA,MAAA;AAGT,YAAM,YAAY;AAClB,YAAM,QAAOM,OAAAH,MAAA,EAAE,kBAAF,gBAAAA,IAAiB,YAAjB,gBAAAG,IAAA,KAAAH,KAA2B;AACxC,UAAI,MAAM;AACC,iBAAA,MAAM,EAAE,QAAQ,UAAU,IAAI,GAAG,UAAA,CAAW,CAAC;AAAA,MAAA,OACjD;AACL,cAAM,QAAO,MAAAM,MAAA,EAAE,kBAAF,gBAAAA,IAAiB,YAAjB,wBAAAA,KAA2B;AACxC,YAAI,MAAM;AACC,mBAAA,MAAM,EAAE,QAAQ,UAAU,IAAI,GAAG,UAAA,CAAW,CAAC;AAAA,QAAA,OACjD;AACL,kBAAQ,KAAK,0BAA0B;AAAA,QAAA;AAAA,MACzC;AAEF,QAAE,eAAe;AACjB,QAAE,gBAAgB;AACX,aAAA;AAAA,IACT;AAAA,IACA,CAAC,SAAS,QAAQ;AAAA,EACpB;AAEA,QAAM,sBAAsB;AAAA,IAC1B,CAAC,MAAgD;;AAC/C,kBAAY,KAAK;AACX,YAAA,gBAAgB,WAAW,MAAM,aAAa;AACpD,OAAAH,OAAAH,MAAA,MAAM,MAAK,YAAX,gBAAAG,IAAA,KAAAH,KAAqB;AAAA,QACnB;AAAA,QACA,QAAQ;AAAA,UACN,UAAU;AAAA,UACV,eAAe,EAAE,GAAG,cAAc,KAAK,GAAG,cAAc,KAAK;AAAA,UAC7D,aAAa,EAAE,GAAG,cAAc,QAAQ,GAAG,cAAc,MAAM;AAAA,QAAA;AAAA,MACjE;AAAA,IAEJ;AAAA,IACA,CAAC,MAAM,eAAe,QAAQ;AAAA,EAChC;AAEA,QAAM,wBAAwB;AAAA,IAC5B,CAAC,GAAoC,UAAkB;AACrD,kBAAY,KAAK;AACjB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AACX,aAAA;AAAA,IACT;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,aAAa,UAAU,eAAe,EAAE;AAAA,MACnD,OAAO,UAAU,EAAE,KAAK,MAAM,WAAW,CAAC;AAAA,MACzC,GAAG;AAAA,QACF,aAAa;AAAA,QACb,iBAAiB;AAAA,MACnB;AAAA,MAEA,UAAA;AAAA,QAAA,oBAAC,SAAI,WAAW,iBAAiB,UAAU,eAAe,EAAE,IAAK,UAAQ,QAAA,CAAA;AAAA,6BACxE,OAAI,EAAA,WAAU,mBAAkB,OAAO,EAAE,MACxC,GAAA,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA;AAAA,gBAEL,SAAQ,eAAU,YAAV,mBAAmB;AAAA,gBAC3B,UAAQ,eAAU,YAAV,mBAAmB,gBAAe,KAAK;AAAA,cACjD;AAAA,cAEC,WAAM,6BAAA,kBAAiB,YAAY,YAAY,SAAS;AAAA,YAAA;AAAA,UAC3D;AAAA,UACA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,iBAAe;AAAA,cACf,MAAK;AAAA,cACL,aAAU;AAAA,cACV,WAAW;AAAA,cACX,YAAY;AAAA,cACZ,WAAW;AAAA,cACX,KAAK;AAAA,cACL,MAAM;AAAA,cACN,SAAS;AAAA,cACT,OAAO,EAAE,UAAU,OAAO,WAAW,OAAO;AAAA,cAC5C,eAAe;AAAA,cACf,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,UAAU;AAAA,cACV,SAAS;AAAA,cACT,WAAW;AAAA,cACX,SAAS;AAAA,YAAA;AAAA,UAAA;AAAA,QACX,GACF;AAAA,QACC,oBAAA,MAAA,EAAG,WAAU,qBAAoB,OAAO,EAAE,YAAW,eAAU,YAAV,mBAAmB,gBACtE,UAAA,gBAAgB,IAAI,CAAC,QAAQ,MAC5B;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAW,oBAAoB,aAAa,IAAI,+BAA+B,EAAE;AAAA,YACjF,aAAa,CAAC,MAAM,sBAAsB,GAAG,CAAC;AAAA,YAE7C,UAAA,OAAO,SAAS,OAAO;AAAA,UAAA;AAAA,UAJnB;AAAA,QAAA,CAMR,EACH,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAGA,MAAM,YAAY;AAAA,EAMhB,CAAC,EAAE,OAAO,UAAU,OAAO,gBAAgB;AACzC,WACG,oBAAA,QAAA,EAAoB,OAAO,QAAQ,EAAE,MAAA,IAAU,QAAW,WACxD,UAAA,MAAM,UAAU,EAAA,GADR,QAEX;AAAA,EAEJ;AAAA,EACA,CAAC,WAAW,cAAc;AAExB,WACE,UAAU,aAAa,UAAU,YACjC,UAAU,UAAU,UAAU,SAC9B,UAAU,cAAc,UAAU,aAClC,UAAU,MAAM,gBAAgB,UAAU,MAAM,UAAU;AAAA,EAAA;AAGhE;AAEa,MAAA,cAAc,CAAC,SAAiB;AACvC,MAAA,KAAK,CAAC,MAAM,KAAK;AACnB,2CAAU,UAAK,KAAA,CAAA;AAAA,EAAA;AAGjB,QAAM,QAAQ,IAAI,MAAM,KAAK,UAAU,CAAC,CAAC;AACzC,QAAM,SAAS;AACf,MAAI,cAAc;AAClB,QAAM,SAAoC,CAAC;AAGrC,QAAA,cAAc,KAAK,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,SAAS;AACxD,YAAS,QAAQ,KAAK,OAAO,KAAK,WAAW,CAAC,IAAK;AAAA,KAClD,CAAC;AAEJ,SACI,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA;AAAA,IAEC,MAAM,OAAO,IAAI,CAAC,OAAO,MAAM;AAE1B,UAAA,MAAM,SAAS,SAAS;AACnB,eAAA,oBAAC,MAAM,UAAN,EAAkD,UAAA,MAAM,UAAU,EAAA,GAA9C,GAAG,WAAW,UAAU,CAAC,EAAuB;AAAA,MAAA;AAIxE,YAAA,WAAW,GAAG,WAAW,IAAI,MAAM,IAAI,IAAI,MAAM,UAAA,CAAW,IAAI,CAAC;AAEvE,UAAI,MAAM,SAAS,SAAS,MAAM,SAAS,SAAS;AAC5C,cAAA,kBAAkB,MAAM,UAAU;AAClC,cAAA,cAAc,OAAO,eAAe;AAC1C,YAAI,gBAAgB,QAAW;AAE3B,iBAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC;AAAA,cACA;AAAA,cACA,OAAO,cAAc,cAAc,cAAc,MAAM;AAAA,YAAA;AAAA,YAHlD;AAAA,UAIP;AAAA,QAAA;AAGJ,cAAM,QAAQ,cAAc,cAAc,cAAc,MAAM;AAC9D,eAAO,eAAe,IAAI;AAExB,eAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW,iBAAiB,MAAM,IAAI;AAAA,UAAA;AAAA,UAJjC;AAAA,QAKP;AAAA,MAAA;AAKF,aAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC;AAAA,UACA;AAAA,UACA,WAAW,iBAAiB,MAAM,IAAI,yBAAyB,OAAO,MAAM,MAAM;AAAA,QAAA;AAAA,QAH7E;AAAA,MAIP;AAAA,IAEH,CAAA;AAAA,EAAA,GACH;AAEJ;AC3uBa,MAAA,gBAAgB,cAAc,EAAuB;AAE3D,SAAS,0BAA6C;AAC3D,QAAM,CAAC,OAAOO,SAAQ,IAAI,SAAgC,MAAS;AACnE,QAAM,CAAC,MAAM,OAAO,IAAI,SAAqB;AACtC,SAAA;AAAA,IACL,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,UAAAA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,mBAAiD;AACzD,QAAA,MAAM,WAAW,aAAa;AAChC,OAAA,2BAAK,aAAY,MAAM;AAClB,WAAA,CAAC,OAAO,GAAG;AAAA,EAAA;AAEb,SAAA,CAAC,MAAM,GAAG;AACnB;AAeO,SAAS,WAAW,EAAE,UAAU,WAAkB;AACjD,QAAA,CAAC,QAAQ,IAAI,iBAAiB;AACpC,MAAI,UAAU;AACZ,2CAAU,UAAS;AAAA,EAAA;AAErB,6BAAQ,cAAc,UAAd,EAAuB,OAAO,SAAU,UAAS;AAC3D;ACrCO,MAAM,gBAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AACxC,QAAA,EAAE,eAAe,SAAA,IAAa;AACpC,QAAM,QAAQ,SAAS;AAEvB,YAAU,MAAM;AACd,QAAI,CAAC,OAAO;AACV;AAAA,IAAA;AAEE,QAAA,aAAa,cAAc,MAAM,WAAW;AAC9C,YAAM,YAAY;AAClB,YAAM,KAAK,eAAe,SAAS,IAAI,MAAM;AAC7C,aAAO,MAAM,KAAK,eAAe,MAAM,aAAa;AACpD,YAAM,gBAAgB;AAAA,IAAA;AAAA,EAExB,GACC,CAAC,SAAS,CAAC;AAEd,YAAU,MAAM;AACd,QAAI,CAAC,OAAO;AACV;AAAA,IAAA;AAEI,UAAA,EAAE,SAAS;AACK,0BAAA,MAAM,KAAK,iBAAiB;AAClD,SAAK,kBAAkB,MAAM,OAAO,IAAI,EAAE,OAAO,SAAS;AAC1D,SAAK,SAAS;AAEd,QAAI,WAAW;AACb,gBAAU,UAAU;AAAA,QAClB,cAAc;AAAA,UACZ;AAAA,UACA,MAAM,CAACC,WAAU;AACN,qBAAA,YAAYA,MAAc,CAAC;AAAA,UAAA;AAAA,QAExC;AAAA,QACA,cAAc;AAAA,UACZ;AAAA,UACA,MAAM,CAACC,WAAU;AACN,qBAAA,SAASA,MAAK,CAAC;AAAA,UAC1B;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAED,GAAA,CAAC,OAAO,OAAO,SAAS,CAAC;AAE5B,YAAU,MAAM;AACd,QAAI,aAAa;AACf,eAAS,SAAS,EAAE,YAAY,CAAC,CAAC;AAAA,IAAA;AAAA,EACpC,GACC,CAAC,aAAa,QAAQ,CAAC;AAC1B,YAAU,MAAM;AACd,QAAI,YAAY;AACd,eAAS,SAAS,EAAE,WAAW,CAAC,CAAC;AAAA,IAAA;AAAA,EACnC,GACC,CAAC,UAAU,CAAC;AACf,YAAU,MAAM;AACV,QAAA,OAAO,mBAAmB,aAAa;AACzC,eAAS,SAAS,EAAE,eAAe,CAAC,CAAC;AAAA,IAAA;AAAA,EACvC,GACC,CAAC,cAAc,CAAC;AACnB,YAAU,MAAM;AACV,QAAA,OAAO,gBAAgB,aAAa;AACtC,eAAS,SAAS,EAAE,YAAY,CAAC,CAAC;AAAA,IAAA;AAAA,EACpC,GACC,CAAC,WAAW,CAAC;AAEhB,YAAU,MAAM;AACd,QAAI,MAAM;AACR,eAAS,SAAS,EAAE,KAAK,CAAC,CAAC;AAAA,IAAA;AAAA,EAC7B,GACC,CAAC,IAAI,CAAC;AAET,QAAM,CAAC,gBAAgB,aAAa,IAAI,iBAAiB;AACzD,YAAU,MAAM;AACd,QAAI,CAAC,gBAAgB;AACnB;AAAA,IAAA;AAEF,kBAAc,SAAS,KAAK;AACd,kBAAA,QAAQ,MAAM,QAAQ;AAAA,EACnC,GAAA,CAAC,OAAO,gBAAgB,aAAa,CAAC;AAEzC,SAAS,oBAAA,UAAA,EAAA;AACX;AClGO,MAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AACxC,QAAA;AAAA,IACJ,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,QAAQ,SAAS;AAEvB,QAAM,CAAC,GAAG,QAAQ,IAAI,IAAI;AAC1B,QAAM,CAAC,GAAG,QAAQ,IAAI,IAAI;AAE1B,MAAI,QAAQ,WAAW,QAAQ,UAAU,WAAW,QAAQ,CAAC,OAAO;AAC3D,WAAA,oBAAC,OAAI,EAAA,WAAU,wBAAwB,CAAA;AAAA,EAAA;AAGhD,QAAM,OAAO,MAAM,eAAe,EAAE,GAAG,MAAM,KAAK,IAAI,GAAG,GAAG,MAAM,KAAK,IAAI,KAAK,QAAQ;AAClF,QAAA,EAAE,GAAG,SAAS,GAAG,YAAY,QAAQ,QAAQ,sBAAsB;AAEnE,QAAA,aAAY,6BAAM,UAAS;AAC3B,QAAA,cAAa,6BAAM,WAAU;AAE7B,QAAA,QAAQ,aAAa,OAAO;AAC5B,QAAA,SAAS,cAAc,OAAO;AAEpC,QAAM,kBAAkB,MAAM;AACtB,UAAA,gBAAgB,WAAW,aAAa;AAC9C,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAU,IAAA;AACrC,UAAM,OAA2B,CAAC;AAClC,QAAI,MAAM,IAAI;AACR,UAAA,KAAK,CAAC,CAAC;AACP,UAAA,sBAAsB,QAAQ,EAAE,OAAO,MAAM,KAAK,SAAS,CAAC,GAAG;AAC5D,aAAA,aAAa,MAAM,QAAQ,CAAC;AAAA,MAAA;AAEhC,SAAA,QAAQ,CAACC,OAAM;AACX,aAAA,IAAI,EAAE,GAAG,GAAG,GAAAA,GAAG,CAAA,CAAC,IAAI,EAAE,MAAM;AAAA,MAAA,CAClC;AAAA,IAAA;AAEH,QAAI,MAAM,IAAI;AACR,UAAA,KAAK,CAAC,CAAC;AACP,UAAA,uBAAuB,QAAQ,EAAE,OAAO,KAAK,KAAK,UAAU,CAAC,GAAG;AAC7D,aAAA,aAAa,KAAK,SAAS,CAAC;AAAA,MAAA;AAEhC,SAAA,QAAQ,CAAC7B,OAAM;AACX,aAAA,IAAI,EAAE,GAAAA,IAAG,GAAG,EAAG,CAAA,CAAC,IAAI,EAAE,OAAO;AAAA,MAAA,CACnC;AAAA,IAAA;AAEH,UAAM,OAAO;AAAA,MACX;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,MACV,gBAAgB,EAAE,eAAe,SAAS,MAAM,QAAQ;AAAA,IAAA,CACzD;AACD;AAAA,MACE,SAAS;AAAA,QACP,eAAe,EAAE,SAAS,MAAM;AAAA,MACjC,CAAA;AAAA,IACH;AACA,aAAS,qBAAqB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAC3C,aAAS,qBAAqB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAC3C,cAAU,QAAS,MAAM;AAAA,EAC3B;AACM,QAAA,mBAAmB,CAAC,MAAkB;AAC1C,QAAI,MAAM,IAAI;AACZ,UAAI8B,QAAO,EAAE;AACPC,YAAAA,UAAS,cAAcD,QAAO;AACpC,UAAIC,UAAS,YAAY;AACvBD,iBAAQ,aAAaC;AAAAA,MAAA;AAEvB,eAAS,qBAAqB,CAAC,GAAG,QAAQD,KAAI,CAAC,CAAC;AAAA,IAAA,WACvC,MAAM,IAAI;AACnB,UAAIE,QAAO,EAAE;AACPC,YAAAA,SAAQ,aAAaD,QAAO;AAClC,UAAIC,SAAQ,WAAW;AACrBD,iBAAQ,YAAYC;AAAAA,MAAA;AAEtB,eAAS,qBAAqB,CAAC,GAAG,QAAQD,KAAI,CAAC,CAAC;AAAA,IAAA;AAAA,EAEpD;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,eAAe,MAAM,MAAM,MAAM,KAAK,cAAc,EAAE;AAAA,MACjE,WAAW;AAAA,MACX,aAAa;AAAA,MAEb,UAAA;AAAA,QAAA,oBAAC,OAAI,EAAA,WAAW,oBAAoB,MAAM,KAAK,cAAc,EAAE,IAC7D,UAAC,oBAAA,OAAA,EAAI,WAAW,WAAW,OAAO,EAAE,OAAO,GAAG,QAAQ,QAAQ,MAAM,OAAO,QAAQ,GACjF,UAAC,qBAAA,QAAA,EAAK,OAAO,EAAE,MAAM,OAAW,GAAA,UAAA;AAAA,UAAA;AAAA,UAAM;AAAA,QAAA,EAAE,CAAA,EAC1C,CAAA,GACF;AAAA,QACC,oBAAA,OAAA,EAAI,WAAW,sBAAsB,MAAM,KAAK,cAAc,EAAE,IAC/D,UAAA,oBAAC,OAAI,EAAA,WAAW,WAAW,OAAO,EAAE,OAAO,QAAQ,QAAQ,GAAG,KAAK,OAAO,QACxE,GAAA,UAAA,qBAAC,QAAK,EAAA,OAAO,EAAE,KAAK,OAAW,GAAA,UAAA;AAAA,UAAA;AAAA,UAAO;AAAA,QAAA,EAAE,CAAA,EAC1C,CAAA,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AC9GO,MAAM,UAAc,MAAM;AAC/B,QAAM,EAAE,MAAA,IAAU,WAAW,OAAO;AACpC,QAAM,EAAE,UAAU,UAAU,eAAe,MAAM,kBAAkB;AACnE,QAAM,QAAQ,cAAc;AAE5B,YAAU,MAAM;AACd,SAAI,+BAAO,kBAAiB,MAAM,KAAK,UAAU;AAC/C,YAAM,KAAK,SAAS;AAAA,QAClB;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,UACA,eAAe,EAAE,GAAG,KAAK,QAAQ,GAAG,KAAK,OAAO;AAAA,UAChD,aAAa,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,KAAK;AAAA,QAAA;AAAA,MAC5C,CACD;AAAA,IAAA;AAAA,EACH,GACC,CAAC,aAAa,CAAC;AAElB,YAAU,MAAM;AACV,QAAA,SAAS,MAAM,KAAK,UAAU;AAChC,YAAM,KAAK,SAAS;AAAA,QAClB;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,UACA,eAAe,EAAE,GAAG,KAAK,QAAQ,GAAG,KAAK,OAAO;AAAA,UAChD,aAAa,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,KAAK;AAAA,QAAA;AAAA,MAC5C,CACD;AAAA,IAAA;AAAA,EACH,GACC,CAAC,UAAU,IAAI,CAAC;AACZ,SAAA;AACT;ACjBO,MAAM,SAAS,OAAO,EAAE,OAAO,eAAiC;;AAC/D,QAAA,EAAE,cAAc;AAChB,QAAA,OAAO,KAAK,KAAK;AACvB,WAAS,KAAK,WAAW,IAAI,CAAC,CAAC;AAC/B,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,SAAS,OAAO,EAAE,OAAO,eAAiC;;AAC/D,QAAA,EAAE,cAAc;AAChB,QAAA,OAAO,KAAK,KAAK;AACvB,WAAS,IAAI,WAAW,IAAI,CAAC,CAAC;AAC9B,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,SAAS,OAAO,EAAE,OAAO,SAAS,GAAqB,YAAY,UAAU;;AAClF,QAAA,EAAE,cAAc;AACtB,QAAM,QAAQ,MAAM,UAAU,UAAU,KAAK;AAC7C,MAAI,QAAyB,CAAC;AAC9B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC/B,UAAA,OAAO,MAAM,CAAC;AACpB,QAAI,KAAK,MAAM,QAAQ,WAAW,MAAM,IAAI;AAC1C,YAAM,OAAO,MAAM,KAAK,QAAQ,WAAW;AACrC,YAAA,OAAO,MAAM,KAAK,KAAK;AAC7B,UAAI,MAAM;AACA,gBAAA,UAAU,MAAM,SAAS;AACjC;AAAA,MAAA;AAAA,IACF,WACS,KAAK,MAAM,QAAQ,YAAY,MAAM,IAAI;AAClD,YAAM,OAAO,MAAM,KAAK,QAAQ,YAAY;AACtC,YAAA,OAAO,MAAM,KAAK,KAAK;AAC7B,UAAI,MAAM;AACR,gBAAQ,UAAU,IAAI;AACtB;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEF,WAAS,MAAM,EAAE,QAAQ,OAAO,UAAW,CAAA,CAAC;AAC5C,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,SAAS,OAAO,EAAE,OAAO,eAAiC;;AAC/D,QAAA,EAAE,cAAc;AACb,WAAA,KAAK,IAAI,CAAC;AACnB,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,SAAS,OAAO,EAAE,OAAO,eAAiC;;AAC/D,QAAA,EAAE,cAAc;AACb,WAAA,KAAK,IAAI,CAAC;AACnB,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,oBAAoB,OAAO,EAAE,OAAO,eAAiC;;AAC1E,QAAA,EAAE,eAAe,UAAA,IAAc;AACrC,QAAM,EAAE,IAAA,IAAQ,WAAW,aAAa;AAClC,QAAA,UAAU,UAAU,EAAE,GAAG,eAAe,MAAM,EAAG,CAAA,EAAE;AAChD,WAAA,gBAAgB,EAAE,SAAS,GAAG,KAAK,UAAU,OAAA,CAAQ,CAAC;AAC/D,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,oBAAoB,OAAO,EAAE,OAAO,eAAiC;;AAC1E,QAAA,EAAE,eAAe,UAAA,IAAc;AACrC,QAAM,EAAE,OAAA,IAAW,WAAW,aAAa;AACrC,QAAA,UAAU,UAAU,EAAE,GAAG,eAAe,MAAM,EAAG,CAAA,EAAE;AAChD,WAAA,gBAAgB,EAAE,SAAS,GAAG,QAAQ,UAAU,OAAA,CAAQ,CAAC;AAClE,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,mBAAmB,OAAO,EAAE,OAAO,eAAiC;;AACzE,QAAA,EAAE,eAAe,UAAA,IAAc;AACrC,QAAM,EAAE,KAAA,IAAS,WAAW,aAAa;AACnC,QAAA,UAAU,UAAU,EAAE,GAAG,eAAe,MAAM,EAAG,CAAA,EAAE;AAChD,WAAA,eAAe,EAAE,SAAS,GAAG,MAAM,UAAU,OAAA,CAAQ,CAAC;AAC/D,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,oBAAoB,OAAO,EAAE,OAAO,eAAiC;;AAC1E,QAAA,EAAE,eAAe,UAAA,IAAc;AACrC,QAAM,EAAE,MAAA,IAAU,WAAW,aAAa;AACpC,QAAA,UAAU,UAAU,EAAE,GAAG,eAAe,MAAM,EAAG,CAAA,EAAE;AAChD,WAAA,gBAAgB,EAAE,SAAS,GAAG,OAAO,UAAU,OAAA,CAAQ,CAAC;AACjE,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,cAAc,OAAO,EAAE,OAAO,eAAiC;;AACpE,QAAA,EAAE,eAAe,UAAA,IAAc;AACrC,QAAM,EAAE,IAAA,IAAQ,WAAW,aAAa;AAClC,QAAA,UAAU,UAAU,EAAE,GAAG,eAAe,MAAM,EAAG,CAAA,EAAE;AAChD,WAAA,WAAW,EAAE,SAAS,GAAG,KAAK,UAAU,OAAA,CAAQ,CAAC;AAC1D,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,cAAc,OAAO,EAAE,OAAO,eAAiC;;AACpE,QAAA,EAAE,eAAe,UAAA,IAAc;AACrC,QAAM,EAAE,KAAA,IAAS,WAAW,aAAa;AACnC,QAAA,UAAU,UAAU,EAAE,GAAG,eAAe,MAAM,EAAG,CAAA,EAAE;AAChD,WAAA,WAAW,EAAE,SAAS,GAAG,MAAM,UAAU,OAAA,CAAQ,CAAC;AAC3D,kBAAU,YAAV,mBAAmB;AACrB;AAEO,MAAM,UAAU;AAAA,EACrB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,YAAY;AACd;AC3GO,MAAM,cAAc,MAAM;AAC/B,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AACxC,QAAA,EAAE,qBAAqB,iBAAA,IAAqB;AAClD,QAAM,EAAE,GAAG,KAAK,GAAG,KAAS,IAAA;AAC5B,MAAI,QAAQ,IAAI;AACP,WAAA;AAAA,EAAA;AAGP,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS,CAAC,MAAkB;AAC1B,UAAE,eAAe;AACjB,iBAAS,uBAAuB,EAAE,GAAG,IAAI,GAAG,GAAA,CAAI,CAAC;AAC1C,eAAA;AAAA,MACT;AAAA,MAEA,UAAC,oBAAA,OAAA,EAAI,WAAW,kBAAkB,OAAO,EAAE,KAAU,KAAW,GAC9D,8BAAC,MACE,EAAA,UAAA,iBAAiB,IAAI,CAAC,MAAM,UAAU;AACrC,eAAQ,oBAAA,MAAA,EAAiB,OAAc,SAAA,GAArB,KAAyC;AAAA,MAC5D,CAAA,EACH,CAAA,EACF,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAMa,MAAA,UAAU,CAAC,UAA4B;AAEhD,SAAA,qBAAC,MAAG,EAAA,WAAU,cAAa,eAAY,YAAW,SAAS,YAAY,MAAM,OAAO,KAAK,GACvF,UAAA;AAAA,IAAC,oBAAA,OAAA,EAAI,WAAU,gBAAe,UAAG,OAAA;AAAA,IACjC,oBAAC,SAAI,WAAU,oBACb,8BAAC,QAAK,EAAA,WAAU,qBAAoB,UAAA,IAAC,CAAA,EACvC,CAAA;AAAA,EAAA,GACF;AAEJ;AAEa,MAAA,WAAW,CAAC,UAA4B;AAEjD,SAAA,qBAAC,MAAG,EAAA,WAAU,cAAa,eAAY,aAAY,SAAS,YAAY,MAAM,OAAO,KAAK,GACxF,UAAA;AAAA,IAAC,oBAAA,OAAA,EAAI,WAAU,gBAAe,UAAI,QAAA;AAAA,IAClC,oBAAC,SAAI,WAAU,oBACb,8BAAC,QAAK,EAAA,WAAU,qBAAoB,UAAA,IAAC,CAAA,EACvC,CAAA;AAAA,EAAA,GACF;AAEJ;AAEa,MAAA,YAAY,CAAC,UAA4B;AACpD,SACG,qBAAA,MAAA,EAAG,WAAU,cAAa,eAAY,cAAa,SAAS,YAAY,MAAM,OAAO,OAAO,KAAK,GAChG,UAAA;AAAA,IAAC,oBAAA,OAAA,EAAI,WAAU,gBAAe,UAAK,SAAA;AAAA,IACnC,oBAAC,SAAI,WAAU,oBACb,8BAAC,QAAK,EAAA,WAAU,qBAAoB,UAAA,IAAC,CAAA,EACvC,CAAA;AAAA,EAAA,GACF;AAEJ;AAEa,MAAA,qBAAqB,CAAC,UAA4B;AAC7D,SACG,qBAAA,MAAA,EAAG,WAAU,cAAa,eAAY,yBAAwB,SAAS,YAAY,MAAM,OAAO,OAAO,IAAI,GAC1G,UAAA;AAAA,IAAC,oBAAA,OAAA,EAAI,WAAU,gBAAe,UAAgB,oBAAA;AAAA,IAC9C,qBAAC,OAAI,EAAA,WAAU,oBAAmB,UAAA;AAAA,MAAA;AAAA,MACvB,oBAAA,QAAA,EAAK,WAAU,qBAAoB,UAAC,IAAA,CAAA;AAAA,IAAA,EAC/C,CAAA;AAAA,EAAA,GACF;AAEJ;AAEa,MAAA,+BAA+B,CAAC,UAA4B;AACvE,QAAM,EAAE,qBAAqB,mBAAmB,IAAI,MAAM;AAC1D,MAAI,uBAAuB,oBAAoB;AACtC,WAAA,oBAAC,MAAG,EAAA,WAAU,kBAAkB,CAAA;AAAA,EAAA;AAElC,SAAA;AACT;AAEa,MAAA,sBAAsB,CAAC,UAA4B;AAC9D,QAAM,EAAE,eAAe,UAAU,UAAU,eAAe,oBAAA,IAAwB,MAAM;AACxF,QAAM,QAAQ,SAAS;AAEnB,MAAA,CAAC,uBAAuB,CAAC,OAAO;AAC3B,WAAA;AAAA,EAAA;AAEH,QAAA,EAAE,MAAM;AACR,QAAA,EAAE,WAAW,UAAU,EAAE,GAAG,eAAe,MAAM,GAAG;AACpD,QAAA,mBAAmB,MAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AACnE,QAAM,WACH,MAAM,eAAe,MAAM,MAAM,WAAW,IAAI,SAAS,MAAM,cAChEjB,aAAwB,qDAAkB,YAAYmB,eAA0B;AAEhF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,gBAAgB;AAAA,MACtC,eAAY;AAAA,MACZ,SAAS,OAAO,MAAM;AACpB,YAAI,CAAC,UAAU;AACb,gBAAM,kBAAkB,KAAK;AAAA,QAAA;AAAA,MAEjC;AAAA,MAEA,UAAA,qBAAC,OAAI,EAAA,WAAU,gBAAe,UAAA;AAAA,QAAA;AAAA,QACpB;AAAA,QAAO;AAAA,QAAK,SAAS,KAAK;AAAA,QAAI;AAAA,MAAA,EACxC,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAEa,MAAA,sBAAsB,CAAC,UAA4B;AAC9D,QAAM,EAAE,eAAe,UAAU,UAAU,eAAe,oBAAA,IAAwB,MAAM;AACxF,QAAM,QAAQ,SAAS;AAEnB,MAAA,CAAC,uBAAuB,CAAC,OAAO;AAC3B,WAAA;AAAA,EAAA;AAEH,QAAA,EAAE,MAAM;AACR,QAAA,EAAE,WAAW,UAAU,EAAE,GAAG,eAAe,MAAM,GAAG;AACpD,QAAA,sBAAsB,MAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AACtE,QAAM,WACH,MAAM,eAAe,MAAM,MAAM,WAAW,IAAI,SAAS,MAAM,cAChEnB,aAAwB,2DAAqB,YAAYoB,eAA0B;AAEnF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,gBAAgB;AAAA,MACtC,eAAY;AAAA,MACZ,SAAS,OAAO,MAAM;AACpB,YAAI,CAAC,UAAU;AACb,gBAAM,kBAAkB,KAAK;AAAA,QAAA;AAAA,MAEjC;AAAA,MAEA,UAAA,qBAAC,OAAI,EAAA,WAAU,gBAAe,UAAA;AAAA,QAAA;AAAA,QACpB;AAAA,QAAO;AAAA,QAAK,SAAS,KAAK;AAAA,QAAI;AAAA,MAAA,EACxC,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAEa,MAAA,qBAAqB,CAAC,UAA4B;AAC7D,QAAM,EAAE,eAAe,UAAU,UAAU,eAAe,mBAAA,IAAuB,MAAM;AACvF,QAAM,QAAQ,SAAS;AAEnB,MAAA,CAAC,sBAAsB,CAAC,OAAO;AAC1B,WAAA;AAAA,EAAA;AAEH,QAAA,EAAE,MAAM;AACR,QAAA,EAAE,UAAU,UAAU,EAAE,GAAG,eAAe,MAAM,GAAG;AACnD,QAAA,oBAAoB,MAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AACpE,QAAM,WACH,MAAM,eAAe,MAAM,MAAM,WAAW,IAAI,QAAQ,MAAM,cAC/DpB,aAAwB,uDAAmB,YAAYqB,cAAyB;AAEhF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,gBAAgB;AAAA,MACtC,eAAY;AAAA,MACZ,SAAS,OAAO,MAAM;AACpB,YAAI,CAAC,UAAU;AACb,gBAAM,iBAAiB,KAAK;AAAA,QAAA;AAAA,MAEhC;AAAA,MAEA,UAAA,qBAAC,OAAI,EAAA,WAAU,gBAAe,UAAA;AAAA,QAAA;AAAA,QACpB;AAAA,QAAM;AAAA,QAAQ,QAAQ,KAAK;AAAA,QAAI;AAAA,MAAA,EACzC,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAEa,MAAA,sBAAsB,CAAC,UAA4B;AAC9D,QAAM,EAAE,eAAe,UAAU,UAAU,eAAe,mBAAA,IAAuB,MAAM;AACvF,QAAM,QAAQ,SAAS;AAEnB,MAAA,CAAC,sBAAsB,CAAC,OAAO;AAC1B,WAAA;AAAA,EAAA;AAEH,QAAA,EAAE,MAAM;AACR,QAAA,EAAE,UAAU,UAAU,EAAE,GAAG,eAAe,MAAM,GAAG;AACnD,QAAA,qBAAqB,MAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AACrE,QAAM,WACH,MAAM,eAAe,MAAM,MAAM,WAAW,IAAI,QAAQ,MAAM,cAC/DrB,aAAwB,yDAAoB,YAAYsB,eAA0B;AAElF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,gBAAgB;AAAA,MACtC,eAAY;AAAA,MACZ,SAAS,OAAO,MAAM;AACpB,YAAI,CAAC,UAAU;AACb,gBAAM,kBAAkB,KAAK;AAAA,QAAA;AAAA,MAEjC;AAAA,MAEA,UAAA,qBAAC,OAAI,EAAA,WAAU,gBAAe,UAAA;AAAA,QAAA;AAAA,QACpB;AAAA,QAAM;AAAA,QAAQ,QAAQ,KAAK;AAAA,QAAI;AAAA,MAAA,EACzC,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAEa,MAAA,iBAAiB,CAAC,UAA4B;AACzD,QAAM,EAAE,eAAe,UAAU,UAAU,eAAe,oBAAA,IAAwB,MAAM;AACxF,QAAM,QAAQ,SAAS;AAEnB,MAAA,CAAC,uBAAuB,CAAC,OAAO;AAC3B,WAAA;AAAA,EAAA;AAEH,QAAA,EAAE,MAAM;AACR,QAAA,EAAE,WAAW,UAAU,EAAE,GAAG,eAAe,MAAM,GAAG;AACpD,QAAA,mBAAmB,MAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AACnE,QAAM,WACH,MAAM,eAAe,MAAM,MAAM,WAAW,IAAI,SAAS,MAAM,cAChEtB,aAAwB,qDAAkB,YAAYuB,UAAqB;AAE3E,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,gBAAgB;AAAA,MACtC,eAAY;AAAA,MACZ,SAAS,OAAO,MAAM;AACpB,YAAI,CAAC,UAAU;AACb,gBAAM,YAAY,KAAK;AAAA,QAAA;AAAA,MAE3B;AAAA,MAEA,UAAA,qBAAC,OAAI,EAAA,WAAU,gBAAe,UAAA;AAAA,QAAA;AAAA,QACpB;AAAA,QAAO;AAAA,QAAK,SAAS,KAAK;AAAA,MAAA,EACpC,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAEa,MAAA,iBAAiB,CAAC,UAA4B;AACzD,QAAM,EAAE,eAAe,UAAU,UAAU,eAAe,mBAAA,IAAuB,MAAM;AACvF,QAAM,QAAQ,SAAS;AAEnB,MAAA,CAAC,sBAAsB,CAAC,OAAO;AAC1B,WAAA;AAAA,EAAA;AAEH,QAAA,EAAE,MAAM;AACR,QAAA,EAAE,UAAU,UAAU,EAAE,GAAG,eAAe,MAAM,GAAG;AACnD,QAAA,qBAAqB,MAAM,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AACrE,QAAM,WACH,MAAM,eAAe,MAAM,MAAM,WAAW,IAAI,QAAQ,MAAM,cAC/DvB,aAAwB,yDAAoB,YAAYwB,UAAqB;AAE7E,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,gBAAgB;AAAA,MACtC,eAAY;AAAA,MACZ,SAAS,OAAO,MAAM;AACpB,YAAI,CAAC,UAAU;AACb,gBAAM,YAAY,KAAK;AAAA,QAAA;AAAA,MAE3B;AAAA,MAEA,UAAA,qBAAC,OAAI,EAAA,WAAU,gBAAe,UAAA;AAAA,QAAA;AAAA,QACpB;AAAA,QAAM;AAAA,QAAQ,QAAQ,KAAK;AAAA,MAAA,EACrC,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAEa,MAAA,qBAAqB,CAAC,UAA4B;AAC7D,QAAM,EAAE,eAAe,SAAS,IAAI,MAAM;AAC1C,QAAM,QAAQ,SAAS;AAEvB,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EAAA;AAGH,QAAA,eAAe,MAAM,gBAAgB;AAC3C,MAAI,eAAe,MAAM,eAAe,MAAM,mBAAmB,GAAG;AAC3D,WAAA,oBAAC,MAAG,EAAA,WAAU,kBAAkB,CAAA;AAAA,EAAA;AAElC,SAAA;AACT;AAEa,MAAA,WAAW,CAAC,UAA4B;AACnD,QAAM,EAAE,eAAe,SAAS,IAAI,MAAM;AAC1C,QAAM,QAAQ,SAAS;AAEvB,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EAAA;AAGH,QAAA,eAAe,MAAM,gBAAgB;AAC3C,MAAI,gBAAgB,IAAI;AACf,WAAA;AAAA,EAAA;AAGP,SAAA,qBAAC,MAAG,EAAA,WAAU,cAAa,eAAY,aAAY,SAAS,YAAY,OAAO,KAAK,GAClF,UAAA;AAAA,IAAC,oBAAA,OAAA,EAAI,WAAU,gBAAe,UAAI,QAAA;AAAA,IAClC,oBAAC,SAAI,WAAU,oBACb,8BAAC,QAAK,EAAA,WAAU,qBAAoB,UAAA,IAAC,CAAA,EACvC,CAAA;AAAA,EAAA,GACF;AAEJ;AAEa,MAAA,WAAW,CAAC,UAA4B;AACnD,QAAM,EAAE,eAAe,SAAS,IAAI,MAAM;AAC1C,QAAM,QAAQ,SAAS;AAEvB,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EAAA;AAGH,QAAA,eAAe,MAAM,gBAAgB;AAC3C,MAAI,gBAAgB,MAAM,eAAe,IAAI,GAAG;AACvC,WAAA;AAAA,EAAA;AAGP,SAAA,qBAAC,MAAG,EAAA,WAAU,cAAa,eAAY,aAAY,SAAS,YAAY,OAAO,KAAK,GAClF,UAAA;AAAA,IAAC,oBAAA,OAAA,EAAI,WAAU,gBAAe,UAAI,QAAA;AAAA,IAClC,oBAAC,SAAI,WAAU,oBACb,8BAAC,QAAK,EAAA,WAAU,qBAAoB,UAAA,IAAC,CAAA,EACvC,CAAA;AAAA,EAAA,GACF;AAEJ;AAEO,MAAM,0BAAkD;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AACF;;;;;;;;AC5WA,KAAC,SAAS,GAAE,GAAE;AAAsD,aAAA,UAAe,EAA8H;AAAA,IAAA,EAAErD,OAAM,WAAU;AAAc,UAAI,IAAE,UAAS,IAAE,wBAAuB,IAAE;AAAe,aAAO,SAAS,GAAE,GAAE,GAAE;AAAC,YAAI,IAAE,EAAE;AAAU,UAAE,MAAI,SAASC,IAAE;AAAC,cAAII,KAAE,EAAC,MAAKJ,IAAE,KAAI,MAAG,MAAK,UAAS;AAAE,iBAAO,IAAI,EAAEI,EAAC;AAAA,QAAC,GAAE,EAAE,MAAI,SAASA,IAAE;AAAC,cAAIH,KAAE,EAAE,KAAK,OAAM,GAAG,EAAC,QAAO,KAAK,IAAG,KAAI,KAAE,CAAC;AAAE,iBAAOG,KAAEH,GAAE,IAAI,KAAK,UAAS,GAAG,CAAC,IAAEA;AAAA,QAAC,GAAE,EAAE,QAAM,WAAU;AAAC,iBAAO,EAAE,KAAK,OAAM,GAAG,EAAC,QAAO,KAAK,IAAG,KAAI,MAAE,CAAC;AAAA,QAAC;AAAE,YAAI,IAAE,EAAE;AAAM,UAAE,QAAM,SAASD,IAAE;AAAC,UAAAA,GAAE,QAAM,KAAK,KAAG,OAAI,KAAK,OAAM,EAAG,EAAEA,GAAE,OAAO,MAAI,KAAK,UAAQA,GAAE,UAAS,EAAE,KAAK,MAAKA,EAAC;AAAA,QAAC;AAAE,YAAI,IAAE,EAAE;AAAK,UAAE,OAAK,WAAU;AAAC,cAAG,KAAK,IAAG;AAAC,gBAAIA,KAAE,KAAK;AAAG,iBAAK,KAAGA,GAAE,eAAc,GAAG,KAAK,KAAGA,GAAE,YAAa,GAAC,KAAK,KAAGA,GAAE,WAAY,GAAC,KAAK,KAAGA,GAAE,UAAS,GAAG,KAAK,KAAGA,GAAE,YAAa,GAAC,KAAK,KAAGA,GAAE,cAAe,GAAC,KAAK,KAAGA,GAAE,cAAe,GAAC,KAAK,MAAIA,GAAE;UAAoB,MAAM,GAAE,KAAK,IAAI;AAAA,QAAC;AAAE,YAAI,IAAE,EAAE;AAAU,UAAE,YAAU,SAASK,IAAEK,IAAE;AAAC,cAAIR,KAAE,KAAK,SAAS;AAAE,cAAGA,GAAEG,EAAC,EAAE,QAAO,KAAK,KAAG,IAAEH,GAAE,KAAK,OAAO,IAAE,EAAE,KAAK,IAAI,IAAE,KAAK;AAAQ,cAAG,YAAU,OAAOG,OAAIA,KAAE,SAASL,IAAE;uBAAUA,OAAIA,KAAE;AAAI,gBAAIK,KAAEL,GAAE,MAAM,CAAC;AAAE,gBAAG,CAACK,GAAE,QAAO;AAAK,gBAAIK,MAAG,KAAGL,GAAE,CAAC,GAAG,MAAM,CAAC,KAAG,CAAC,KAAI,GAAE,CAAC,GAAEH,KAAEQ,GAAE,CAAC,GAAEJ,KAAE,KAAG,CAACI,GAAE,CAAC,IAAG,CAACA,GAAE,CAAC;AAAE,mBAAO,MAAIJ,KAAE,IAAE,QAAMJ,KAAEI,KAAE,CAACA;AAAA,UAAC,EAAED,EAAC,GAAE,SAAOA,IAAG,QAAO;AAAK,cAAIC,KAAE,KAAK,IAAID,EAAC,KAAG,KAAG,KAAGA,KAAEA,IAAEY,KAAE;AAAK,cAAGP,GAAE,QAAOO,GAAE,UAAQX,IAAEW,GAAE,KAAG,MAAIZ,IAAEY;AAAE,cAAG,MAAIZ,IAAE;AAAC,gBAAIF,KAAE,KAAK,KAAG,KAAK,OAAM,EAAG,kBAAmB,IAAC,KAAG,KAAK,UAAW;AAAC,aAACc,KAAE,KAAK,MAAK,EAAG,IAAIX,KAAEH,IAAE,CAAC,GAAG,UAAQG,IAAEW,GAAE,GAAG,eAAad;AAAA,UAAC,MAAM,CAAAc,KAAE,KAAK,IAAK;AAAC,iBAAOA;AAAA,QAAC;AAAE,YAAI,IAAE,EAAE;AAAO,UAAE,SAAO,SAASjB,IAAE;AAAC,cAAII,KAAEJ,OAAI,KAAK,KAAG,2BAAyB;AAAI,iBAAO,EAAE,KAAK,MAAKI,EAAC;AAAA,QAAC,GAAE,EAAE,UAAQ,WAAU;AAAC,cAAIJ,KAAE,KAAK,OAAQ,EAAC,EAAE,KAAK,OAAO,IAAE,IAAE,KAAK,WAAS,KAAK,GAAG,gBAAc,KAAK,GAAG;AAAqB,iBAAO,KAAK,GAAG,QAAO,IAAG,MAAIA;AAAA,QAAC,GAAE,EAAE,QAAM,WAAU;AAAC,iBAAM,CAAC,CAAC,KAAK;AAAA,QAAE,GAAE,EAAE,cAAY,WAAU;AAAC,iBAAO,KAAK,OAAQ,EAAC,YAAW;AAAA,QAAE,GAAE,EAAE,WAAS,WAAU;AAAC,iBAAO,KAAK,OAAQ,EAAC,YAAa;AAAA,QAAA;AAAE,YAAI,IAAE,EAAE;AAAO,UAAE,SAAO,SAASA,IAAE;AAAC,iBAAM,QAAMA,MAAG,KAAK,UAAQ,EAAE,KAAK,OAAO,yBAAyB,CAAC,EAAE,OAAQ,IAAC,EAAE,KAAK,IAAI;AAAA,QAAC;AAAE,YAAI,IAAE,EAAE;AAAK,UAAE,OAAK,SAASA,IAAEI,IAAEH,IAAE;AAAC,cAAGD,MAAG,KAAK,OAAKA,GAAE,GAAG,QAAO,EAAE,KAAK,MAAKA,IAAEI,IAAEH,EAAC;AAAE,cAAII,KAAE,KAAK,MAAK,GAAGK,KAAE,EAAEV,EAAC,EAAE;AAAQ,iBAAO,EAAE,KAAKK,IAAEK,IAAEN,IAAEH,EAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC,CAAC;AAAA;;;;;;;;;;;;ACA1sE,KAAC,SAAS,GAAE,GAAE;AAAsD,aAAA,UAAe,EAAC;AAAA,IAAkI,EAAEF,YAAM,WAAU;AAAc,UAAI,IAAE,EAAC,MAAK,GAAE,OAAM,GAAE,KAAI,GAAE,MAAK,GAAE,QAAO,GAAE,QAAO,EAAC,GAAE,IAAE,CAAE;AAAC,aAAO,SAAS,GAAE,GAAE,GAAE;AAAC,YAAI,GAAE,IAAE,SAASC,IAAEE,IAAEE,IAAE;AAAO,qBAAGA,OAAIA,KAAE,CAAE;AAAE,cAAIa,KAAE,IAAI,KAAKjB,EAAC,GAAEG,KAAE,SAASH,IAAEE,IAAE;AAAC,uBAASA,OAAIA,KAAE,CAAE;AAAE,gBAAIE,KAAEF,GAAE,gBAAc,SAAQe,KAAEjB,KAAE,MAAII,IAAED,KAAE,EAAEc,EAAC;AAAE,mBAAOd,OAAIA,KAAE,IAAI,KAAK,eAAe,SAAQ,EAAC,QAAO,OAAG,UAASH,IAAE,MAAK,WAAU,OAAM,WAAU,KAAI,WAAU,MAAK,WAAU,QAAO,WAAU,QAAO,WAAU,cAAaI,GAAC,CAAC,GAAE,EAAEa,EAAC,IAAEd,KAAGA;AAAA,UAAC,EAAED,IAAEE,EAAC;AAAE,iBAAOD,GAAE,cAAcc,EAAC;AAAA,QAAC,GAAE,IAAE,SAAShB,IAAEC,IAAE;AAAC,mBAAQE,KAAE,EAAEH,IAAEC,EAAC,GAAEC,KAAE,CAAA,GAAGG,KAAE,GAAEA,KAAEF,GAAE,QAAOE,MAAG,GAAE;AAAC,gBAAII,KAAEN,GAAEE,EAAC,GAAED,KAAEK,GAAE,MAAK,IAAEA,GAAE,OAAM,IAAE,EAAEL,EAAC;AAAE,iBAAG,MAAIF,GAAE,CAAC,IAAE,SAAS,GAAE,EAAE;AAAA,UAAE;AAAC,cAAI,IAAEA,GAAE,CAAC,GAAE,IAAE,OAAK,IAAE,IAAE,GAAE,IAAEA,GAAE,CAAC,IAAE,MAAIA,GAAE,CAAC,IAAE,MAAIA,GAAE,CAAC,IAAE,MAAI,IAAE,MAAIA,GAAE,CAAC,IAAE,MAAIA,GAAE,CAAC,IAAE,QAAO,IAAE,CAACF;AAAE,kBAAO,EAAE,IAAI,CAAC,EAAE,QAAS,KAAE,KAAG,IAAE,QAAM;AAAA,QAAG,GAAE,IAAE,EAAE;AAAU,UAAE,KAAG,SAASD,IAAEC,IAAE;AAAO,qBAAGD,OAAIA,KAAE;AAAG,cAAIE,IAAEE,KAAE,KAAK,UAAW,GAACG,KAAE,KAAK,OAAM,GAAGD,KAAEC,GAAE,eAAe,SAAQ,EAAC,UAASP,GAAC,CAAC,GAAEU,KAAE,KAAK,OAAOH,KAAE,IAAI,KAAKD,EAAC,KAAG,MAAI,EAAE,GAAED,KAAE,KAAG,CAAC,KAAK,MAAME,GAAE,kBAAiB,IAAG,EAAE,IAAEG;AAAE,cAAG,CAAC,OAAOL,EAAC,EAAE,CAAAH,KAAE,KAAK,UAAU,GAAED,EAAC;AAAA,mBAAUC,KAAE,EAAEI,IAAE,EAAC,QAAO,KAAK,GAAE,CAAC,EAAE,KAAK,eAAc,KAAK,GAAG,EAAE,UAAUD,IAAE,IAAE,GAAEJ,IAAE;AAAC,gBAAI,IAAEC,GAAE,UAAW;AAAC,YAAAA,KAAEA,GAAE,IAAIE,KAAE,GAAE,QAAQ;AAAA,UAAC;AAAC,iBAAOF,GAAE,GAAG,YAAUF,IAAEE;AAAA,QAAC,GAAE,EAAE,aAAW,SAASF,IAAE;AAAC,cAAIC,KAAE,KAAK,GAAG,aAAW,EAAE,GAAG,MAAO,GAACC,KAAE,EAAE,KAAK,QAAS,GAACD,IAAE,EAAC,cAAaD,GAAC,CAAC,EAAE,KAAM,SAASA,IAAE;AAAC,mBAAM,mBAAiBA,GAAE,KAAK;UAAa,CAAC;AAAG,iBAAOE,MAAGA,GAAE;AAAA,QAAK;AAAE,YAAI,IAAE,EAAE;AAAQ,UAAE,UAAQ,SAASF,IAAEC,IAAE;AAAC,cAAG,CAAC,KAAK,MAAI,CAAC,KAAK,GAAG,UAAU,QAAO,EAAE,KAAK,MAAKD,IAAEC,EAAC;AAAE,cAAIC,KAAE,EAAE,KAAK,OAAO,yBAAyB,GAAE,EAAC,QAAO,KAAK,GAAE,CAAC;AAAE,iBAAO,EAAE,KAAKA,IAAEF,IAAEC,EAAC,EAAE,GAAG,KAAK,GAAG,WAAU,IAAE;AAAA,QAAC,GAAE,EAAE,KAAG,SAASD,IAAEC,IAAEC,IAAE;AAAC,cAAIE,KAAEF,MAAGD,IAAEM,KAAEL,MAAGD,MAAG,GAAES,KAAE,EAAE,CAAC,EAAG,GAACH,EAAC;AAAE,cAAG,YAAU,OAAOP,GAAE,QAAO,EAAEA,EAAC,EAAE,GAAGO,EAAC;AAAE,cAAIF,KAAE,SAASL,IAAEC,IAAEC,IAAE;AAAC,gBAAIE,KAAEJ,KAAE,KAAGC,KAAE,KAAIgB,KAAE,EAAEb,IAAEF,EAAC;AAAE,gBAAGD,OAAIgB,GAAE,QAAM,CAACb,IAAEH,EAAC;AAAE,gBAAIE,KAAE,EAAEC,MAAG,MAAIa,KAAEhB,MAAG,KAAIC,EAAC;AAAE,mBAAOe,OAAId,KAAE,CAACC,IAAEa,EAAC,IAAE,CAACjB,KAAE,KAAG,KAAK,IAAIiB,IAAEd,EAAC,IAAE,KAAI,KAAK,IAAIc,IAAEd,EAAC,CAAC;AAAA,UAAC,EAAE,EAAE,IAAIH,IAAEI,EAAC,EAAE,QAAS,GAACM,IAAEH,EAAC,GAAE,IAAEF,GAAE,CAAC,GAAE,IAAEA,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC,EAAE,UAAU,CAAC;AAAE,iBAAO,EAAE,GAAG,YAAUE,IAAE;AAAA,QAAC,GAAE,EAAE,GAAG,QAAM,WAAU;AAAC,iBAAO,KAAK,eAAc,EAAG,gBAAiB,EAAC;AAAA,QAAQ,GAAE,EAAE,GAAG,aAAW,SAASP,IAAE;AAAC,cAAEA;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC,CAAC;AAAA;;;;;ACK3oE,MAAM,OAAO,QAAQ;AACrB,MAAM,OAAO,GAAG;AAWhB,MAAM,QAAQ,EAAE,MAAM,MAAM,OAAO,MAAM;AACzC,MAAM,OAAO,oBAAI,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AACvE,MAAM,6BAAa,IAAI,CAAC,GAAG,MAAM,KAAK,GAAG,CAAC;AAC1C,MAAM,WAAW,oBAAI,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,CAAC;AAC1E,MAAM,cAAkB,oBAAA,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,CAAC;AAavF,MAAMqD,QAAkC;AAAA,EAK7C,YAAY,OAAe;AACpB,SAAA,YAAY,+BAAO,MAAM;AAE1B,QAAA,CAAC,KAAK,WAAW;AACnB,WAAK,YAAY;AAAA,QACf,KAAK,OAAO,KAAK,IAAI;AAAA,QACrB,KAAK,UAAU,KAAK,IAAI;AAAA,QACxB,KAAK,KAAK,KAAK,IAAI;AAAA,QACnB,KAAK,KAAK,KAAK,IAAI;AAAA,QACnB,KAAK,IAAI,KAAK,IAAI;AAAA,MACpB;AAAA,IAAA;AAGF,QAAI,SAAS,MAAM;AACX,YAAA,EAAE,WAAW,WAAA,IAAe;AAClC,WAAK,YAAY;AACjB,WAAK,aAAa;AAAA,IAAA;AAAA,EACpB;AAAA,EAGM,YAAY,QAA4B;AAC9C,QAAI,CAAC,QAAQ;AACX;AAAA,IAAA;AAGF,eAAW,SAAS,QAAQ;AAC1B,iBAAW,OAAO,OAAO;AACvB,YAAI,QAAQ,eAAe,MAAM,QAAQ,MAAM,SAAS,GAAG;AACrD,cAAA,CAAC,KAAK,WAAW;AACnB,iBAAK,YAAY,CAAC;AAAA,UAAA;AAEpB,eAAK,UAAU,KAAK,GAAG,MAAM,SAAS;AAAA,QAAA,OACjC;AACJ,eAAa,GAAG,IAAK,MAAc,GAAG;AAAA,QAAA;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAAA,EAGK,KAAK,OAAe,MAA0B;AAC/C,QAAA;AACF,YAAM,SAAS,KAAK,MAAM,OAAO,IAAI;AAC9B,aAAA,KAAK,SAAS,QAAQ,IAAI;AAAA,aAC1B,GAAG;AACV,aAAO,KAAK,SAAS,OAAO,CAAC,GAAG,IAAI;AAAA,IAAA;AAAA,EACtC;AAAA,EAGK,SAAS,QAAa,MAA2B;AACtD,WAAO,EAAE,GAAG,MAAM,OAAO,OAAO;AAAA,EAAA;AAAA,EAG3B,MAAM,OAAe,MAAsB;AAChD,QAAI,KAAK,aAAa,CAAC,KAAK,UAAU,KAAK,GAAG;AAC5C,YAAM,SAAS,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AACnD,aAAA;AAAA,IAAA;AAEL,QAAA,MAAM,CAAC,MAAM,KAAK;AACb,aAAA;AAAA,IAAA;AAET,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC9C,YAAM,SAAS,KAAK,UAAU,CAAC,EAAE,OAAO,IAAI;AAC5C,UAAI,UAAU,MAAM;AACX,eAAA;AAAA,MAAA;AAAA,IACT;AAEF,QAAI,UAAU,IAAI;AACT,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,EAAA;AAAA,EAGT,IAAI,OAAe,MAAqC;AAClD,QAAA,SAAS,QAAQ,UAAU,IAAI;AAC1B,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,EAAA;AAAA,EAGT,KAAK,OAAe,MAAsC;AACjD,WAAA,MAAM,MAAM,aAAa;AAAA,EAAA;AAAA,EAGlC,OAAO,OAAe,MAAqC;AACnD,UAAA,IAAI,MAAM,MAAM,YAAY;AAClC,QAAI,KAAK,QAAQ,MAAM,MAAM,KAAK,KAAK,SAAS,MAAM,MAAM,KAAK,KAAK,CAAA,GAAI,UAAU,GAAG;AACrF,aAAO,WAAW,KAAK;AAAA,IAAA;AAAA,EACzB;AAAA,EAGF,UAAU,OAAe,MAAwC;AAC3D,QAAA,MAAM,SAAS,KAAK,MAAM,MAAM,MAAM,SAAS,CAAC,CAAsB,GAAG;AAC3E;AAAA,IAAA;AAEK,WAAA,UAAU,MAAM,KAAK;AAAA,EAAA;AAAA,EAG9B,KAAK,OAAe,MAAmC;AAC/C,UAAA,QAAQ,MAAM,CAAC;AACjB,QAAA,SAAS,QAAQ,CAAC,SAAS,IAAI,MAAM,YAAA,CAAa,GAAG;AACvD;AAAA,IAAA;AAEE,QAAA,CAAC,YAAY,IAAI,MAAM,MAAM,SAAS,CAAC,EAAE,YAAY,CAAC,GAAG;AAC3D;AAAA,IAAA;AAEE,QAAA,MAAM,MAAM,gCAAgC,GAAG;AACjD;AAAA,IAAA;AAEF,QAAI,WAAW;AACX,QAAA;AACF,iBAAW,KAAK,iBAAiB,gBAAkB,EAAA;AAAA,aAC5C,GAAG;AAAA,IAAA;AACR,QAAA;AACF,YAAM,MAAM,MAAM,GAAG,OAAO,QAAQ;AACpC,aAAO,IAAI,OAAO;AAAA,aACX,GAAG;AAAA,IAAA;AAAA,EAAC;AAEjB;AAIa,MAAA,gBAAgB,IAAIA,QAAO;AC3JxC,MAAM,UAAU,IAAI,QAAQ,SAAS;AAUxB,MAAA,eAAe,CAAC,EAAE,OAAO,OAAO,QAAQ,MAAM,gBAAgB,SAAS,aAAgC;;AAClH,MAAI,kBAAkB,UAAU;AACvB,WAAA;AAAA,EAAA;AAET,MAAI,SAAS;AAET,MAAA,OAAO,UAAU,UAAU;AAC7B,QAAI,MAAM,OAAO,CAAC,MAAM,KAAK;AACvB,UAAA;AACI,cAAA,QAAQ,IAAI,MAAM,MAAM,UAAU,CAAC,GAAG,EAAE,QAAQ;AACtD,cAAM,SAAS;AACf,cAAM,SAAS,IAAIA,SAAO,MAAM,MAAM;AACtC,YAAI,kBAAkB,OAAO;AAC3B,iBAAO,MAAM,MAAM,QAAQ,EAAE,OAAO;AAAA,QAAA;AAEhC,cAAA,OAAO,OAAO,MAAM;AAC1B,kBAAS,kCAAM,aAAN,8BAAiB,EAAE,MAAA;AAAA,eACrB,GAAG;AACJ,cAAA,eAAe,QAAQ,CAAC;AAC9B,YAAI,OAAO;AACH,gBAAA;AAAA,QAAA;AAED,eAAA;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAEE,MAAA,kBAAkB,cAAc,kBAAkB,OAAO;AAClD,aAAA,WAAW,EAAE,OAAO,QAAQ,OAAO,EAAE,CAAC,EAAE,CAAC;AAAA,EAAA,OAC7C;AACC,UAAA,eAAe,QAAQ,MAAM;AAAA,EAAA;AAE9B,SAAA;AACT;AAQO,MAAM,aAAa,CAAC,EAAE,OAAO,QAAQ,WAAwC;AAC5E,QAAA,OAAO,MAAM,QAAQ;AAC3B,SAAO,MAAM,eAAe,EAAE,MAAM,eAAe,UAAU,OAAO,QAAS,CAAA,EAAE,IAAI,CAAC,KAAK,MAAM;AACvF,UAAA,IAAI,KAAK,MAAM;AACrB,WAAO,IAAI,IAAI,CAAC,OAAO,MAAM;AACrB,YAAA,IAAI,KAAK,OAAO;AAChB,YAAA,QAAQ,EAAE,GAAG,EAAE;AACf,YAAA,QAAQ,MAAM,eAAe,KAAK;AAEpC,UAAA;AACF,YAAI,UAAU,SAAS;AACrB,gBAAM,IAAI,aAAa,SAAS,+BAA+B,IAAI,MAAM,KAAe,CAAC;AAAA,QAAA,WAChF,iBAAiB,cAAc;AAClC,gBAAA;AAAA,QAAA,WACG,SAAS,MAAM;AACjB,iBAAA;AAAA,QAAA;AAEH,cAAA,eAAe,OAAO,OAAO;AAC7B,cAAA,SAAS,aAAa,EAAE,OAAO,OAAO,OAAO,QAAQ,OAAO,eAAe,YAAY;AACvF,cAAA,eAAe,OAAO,MAAM;AAC3B,eAAA;AAAA,eACA,GAAG;AACJ,cAAA,eAAe,OAAO,CAAC;AAC7B,YAAI,OAAO;AACH,gBAAA;AAAA,QAAA;AAED,eAAA;AAAA,MAAA;AAAA,IACT,CACD;AAAA,EAAA,CACF;AACH;AAUO,MAAM,aAAa,CAAC,EAAE,OAAO,IAAI,GAAG,IAAI,GAAG,QAAQ,MAAM,UAAc,oBAAA,YAAkC;AAC9G,MAAI,iBAAiB,OAAO;AAC1B,UAAM,KAAK,MAAM,MAAM,EAAE,GAAG,GAAG;AAC3B,QAAA,QAAQ,IAAI,EAAE,GAAG;AACnB,YAAM,IAAI,IAAI,aAAa,SAAS,6BAA6B;AACjE,UAAI,OAAO;AACH,cAAA;AAAA,MAAA;AAED,aAAA;AAAA,IAAA;AAET,YAAQ,IAAI,EAAE;AACN,YAAA,WAAW,EAAE,OAAO,OAAO,OAAO,EAAE,CAAC,EAAE,CAAC;AAChD,QAAI,iBAAiB,OAAO;AAC1B,aAAO,WAAW,EAAE,OAAO,GAAG,GAAG,OAAO,SAAS;AAAA,IAAA;AAAA,EACnD;AAEK,SAAA;AACT;AC5DO,MAAM,SAAsC;AAAA,EAOjD,YAAY,OAAe;AAN3B,SAAO,iBAAyB;AAChC,SAAO,aAAqB;AAC5B,SAAO,kBAA0B;AAK1B,SAAA,YAAY,+BAAO,MAAM;AAC9B,QAAI,SAAS,MAAM;AACjB;AAAA,IAAA;AAEI,UAAA,EAAE,WAAW,WAAA,IAAe;AAClC,SAAK,YAAY;AACjB,SAAK,aAAa;AAAA,EAAA;AAAA,EAGZ,YAAY,QAA8B;AAChD,QAAI,UAAU,MAAM;AAClB;AAAA,IAAA;AAEF,eAAW,SAAS,QAAQ;AAC1B,iBAAW,OAAO,OAAO;AACtB,aAAa,GAAG,IAAK,MAAc,GAAG;AAAA,MAAA;AAAA,IACzC;AAAA,EACF;AAAA,EAGK,KAAK,OAA+B;AACzC,UAAM,EAAE,OAAO,QAAQ,OAAO,KAAS,IAAA;AACjC,UAAA,MAAM,MAAM,MAAM,MAAM;AAC9B,UAAM,OAAO,MAAM,QAAQ,GAAG,KAAK,CAAC;AAC9B,UAAA,QAAQ,MAAM,eAAe,MAAM;AACzC,QAAI,QAAQ;AACZ,QAAI,UAAU,QAAW;AACvB,UAAI,QAAO,6BAAM,WAAU,YAAY,EAAC,6BAAM,iBAAgB;AAC5D,YAAI,KAAK,MAAM,CAAC,MAAM,KAAK;AACjB,kBAAA,KAAK,MAAM,UAAU,CAAC;AAAA,QAAA,OACzB;AACG,kBAAA,aAAa,EAAE,OAAO,KAAK,OAAO,OAAO,OAAO,MAAM,QAAQ;AAAA,QAAA;AAAA,MACxE,OACK;AACL,gBAAQ,6BAAM;AAAA,MAAA;AAAA,IAChB;AAEI,UAAA,WAAW,KAAK,OAAO,EAAE,OAAO,MAAM,OAAO,MAAM,OAAO,QAAQ;AACjE,WAAA,KAAK,SAAS,UAAU,EAAE,GAAG,OAAO,OAAO,MAAM;AAAA,EAAA;AAAA,EAGnD,SAAS,UAAe,OAAyB;AAC/C,WAAA;AAAA,EAAA;AAAA,EAGF,OAAO,OAAyB;AACrC,UAAM,EAAE,MAAM,OAAO,MAAU,IAAA;AAC/B,UAAM,QAAQ,MAAM;AAEpB,QAAI,KAAK,aAAa,CAAC,KAAK,UAAU,KAAK,GAAG;AACrC,aAAA,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,KAAK,UAAU,KAAK;AAAA,IAAA;AAExE,QAAI,SAAS,MAAM;AACV,aAAA,KAAK,KAAK,KAAK;AAAA,IAAA;AAGxB,YAAQ,OAAO,OAAO;AAAA,MACpB,KAAK;AACH,YAAI,iBAAiB,OAAO;AACnB,iBAAA,KAAK,MAAM,KAAK;AAAA,QAAA;AAEzB,YAAI,iBAAiB,MAAM;AAClB,iBAAA,KAAK,KAAK,KAAK;AAAA,QAAA;AAEpB,YAAA,UAAU,GAAG,KAAK,GAAG;AAChB,iBAAA,KAAK,UAAU,EAAE,OAAO,UAAU,OAAO,KAAK,GAAG,MAAM,OAAO,MAAA,CAAO;AAAA,QAAA;AAE1E,YAAA,MAAM,QAAQ,KAAK,GAAG;AACjB,iBAAA,KAAK,MAAM,KAAK;AAAA,QAAA;AAEzB,YAAI,iBAAiB,cAAc;AAC3B,gBAAA;AAAA,QAAA;AAED,eAAA,KAAK,OAAO,KAAK;AAAA,MAC1B,KAAK;AACI,eAAA,KAAK,OAAO,KAAK;AAAA,MAC1B,KAAK;AACI,eAAA,KAAK,OAAO,KAAK;AAAA,MAC1B,KAAK;AACI,eAAA,KAAK,KAAK,KAAK;AAAA,MACxB,KAAK;AACH,eAAO,MAAM;AAAA,IAAA;AAEV,WAAA;AAAA,EAAA;AAAA,EAGT,UAAU,EAAE,OAAO,MAAM,OAAO,SAA8B;AAC5D,QAAI,UAAU,QAAW;AACvB,cAAQ,6BAAM;AAAA,IAAA;AAEhB,QAAI,iBAAiB,MAAM;AACzB,aAAO,KAAK,KAAK,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,IAAA;AAE5C,QAAA,UAAU,GAAG,KAAK,GAAG;AACjB,YAAA,UAAU,UAAU,OAAO,KAAK;AACtC,aAAO,KAAK,UAAU,EAAE,OAAO,SAAS,MAAM,EAAE,GAAG,MAAM,OAAO,QAAW,GAAA,OAAO,OAAO;AAAA,IAAA;AAE3F,QAAI,SAAS,MAAM;AACV,aAAA;AAAA,IAAA;AAET,QAAI,iBAAiB,cAAc;AAC1B,aAAA;AAAA,IAAA;AAET,QAAI,iBAAiB,OAAO;AACnB,aAAA;AAAA,IAAA;AAET,WAAO,MAAM,SAAS;AAAA,EAAA;AAAA,EAGxB,OAAO,EAAE,SAAmC;AACnC,WAAA;AAAA,EAAA;AAAA,EAGT,MAAM,OAAgC;AAChC,QAAA,EAAE,OAAO,MAAA,IAAU;AACvB,UAAM,QAAQ,WAAW,EAAE,OAAO,OAAO;AACzC,WAAO,KAAK,OAAO,EAAE,GAAG,OAAO,OAAO,OAAO;AAAA,EAAA;AAAA,EAG/C,KAAK,EAAE,SAAoC;AACzC,WAAO,QAAQ,SAAS;AAAA,EAAA;AAAA,EAG1B,OAAO,EAAE,SAAmC;AACtC,QAAA,MAAM,KAAM,GAAG;AACV,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,EAAA;AAAA,EAGT,KAAK,EAAE,SAAiC;AAClC,QAAA,MAAO,aAAa,MAAO,eAAe,MAAO,WAAW,MAAM,GAAG;AACvE,aAAO,MAAM,KAAK,EAAE,OAAO,KAAK,UAAU;AAAA,IAAA;AAE5C,WAAO,MAAM,KAAK,EAAE,OAAO,KAAK,cAAc;AAAA,EAAA;AAAA,EAGhD,UAAU,EAAE,SAAiC;AACpC,WAAA,MAAO,UAAU,KAAK,eAAe;AAAA,EAAA;AAAA,EAG9C,MAAM,OAAgC;AAChC,QAAA,EAAE,UAAU;AACT,WAAA,MAAO,IAAI,CAAC,MAAM,KAAK,UAAU,KAAK,CAAC,EAAE,KAAK,GAAG;AAAA,EAAA;AAAA,EAG1D,OAAO,EAAE,SAAgC;AAChC,WAAA,KAAK,UAAU,KAAK;AAAA,EAAA;AAAA,EAG7B,KAAK,CAAA,GAAwC;AACpC,WAAA;AAAA,EAAA;AAEX;AAGa,MAAA,kBAAkB,IAAI,SAAS;AC9MrC,MAAM,aAAa;AAAA,EAQxB,YAAY,EAAE,MAAM,OAAO,UAAyB;AAPpD,SAAO,UAAU;AACV,SAAA,YAAY,CAAC,yBAAyB;AAC7C,SAAO,WAAW,CAAC,EAAE,MAAM,UAAU,aAAa,IAAI;AAM/C,SAAA,WAAW,KAAK,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACrD,SAAK,QAAQ;AACb,SAAK,SAAS;AAAA,EAAA;AAAA,EAEN,WAAW;AAAA,EAAA;AAAA,EAEd,OAAO;AACZ,SAAK,SAAS;AAId,WAAO,KAAK,KAAK,GAAG,KAAK,QAAQ;AAAA,EAAA;AAErC;AC1Ba,MAAA,KAAK,CAAC,MAAW,UAAwB;AACpD,MAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAAU;AACzD,WAAO,aAAa,IAAI,IAAI,aAAa,KAAK;AAAA,EAAA;AAE5C,MAAA;AACF,WAAO,aAAa,IAAI,IAAI,aAAa,KAAK;AAAA,EAAA,QACxC;AACC,WAAA;AAAA,EAAA;AAEX;AAEa,MAAA,MAAM,CAAC,MAAW,UAAwB;AACrD,MAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAAU;AACzD,WAAO,aAAa,IAAI,KAAK,aAAa,KAAK;AAAA,EAAA;AAE7C,MAAA;AACF,WAAO,aAAa,IAAI,KAAK,aAAa,KAAK;AAAA,EAAA,QACzC;AACC,WAAA;AAAA,EAAA;AAEX;AAEa,MAAA,KAAK,CAAC,MAAW,UAAwB;AAC7C,SAAA,CAAC,IAAI,MAAM,KAAK;AACzB;AAEa,MAAA,MAAM,CAAC,MAAW,UAAwB;AAC9C,SAAA,CAAC,GAAG,MAAM,KAAK;AACxB;AAEa,MAAA,KAAK,CAAC,MAAW,UAAwB;AACpD,SAAO,aAAa,IAAI,MAAM,aAAa,KAAK;AAClD;AAEa,MAAA,KAAK,CAAC,MAAW,UAAwB;AAC7C,SAAA,CAAC,GAAG,MAAM,KAAK;AACxB;AAYa,MAAA,eAAe,CAAC,OAAY,YAA0C;AACjF,QAAM,EAAE,aAAa,OAAO,IAAI,WAAW,CAAC;AAC5C,MAAI,OAAO,UAAU,eAAe,OAAO,gBAAgB,aAAa;AAC/D,WAAA;AAAA,EAAA;AAET,MAAI,CAAC,OAAO;AAEH,WAAA;AAAA,EAAA;AAET,MAAI,iBAAiB,OAAO;AAC1B,UAAM,IAAI,WAAW,EAAE,OAAO;AAC9B,WAAO,aAAa,GAAG,EAAE,aAAa;AAAA,EAAA;AAExC,MAAI,iBAAiB,MAAM;AACzB,WAAO,MAAM,QAAQ;AAAA,EAAA;AAGvB,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG,GAAG;AACpD,UAAMC,OAAM,WAAW,MAAM,MAAM,GAAG,EAAE,CAAC;AACrC,QAAA,CAAC,MAAMA,IAAG,GAAG;AACf,aAAOA,OAAM;AAAA,IAAA;AAAA,EACf;AAGI,QAAA,MAAM,WAAW,KAAe;AAClC,MAAA,MAAM,GAAG,GAAG;AACd,QAAI,QAAQ;AACH,aAAA;AAAA,IAAA;AAET,UAAM,IAAI,aAAa,WAAW,GAAG,KAAK,kCAAkC;AAAA,EAAA;AAEvE,SAAA;AACT;AAEa,MAAA,eAAe,CAAC,UAAuB;AAClD,MAAI,UAAU,GAAG;AACR,WAAA;AAAA,EAAA;AAET,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EAAA;AAET,MAAI,iBAAiB,OAAO;AAC1B,UAAM,IAAI,WAAW,EAAE,OAAO;AAC9B,WAAO,aAAa,CAAC;AAAA,EAAA;AAEf,UAAA,MAAM,YAAY,MAAM;AAAA,IAC9B,KAAK,QAAQ;AACX,YAAM,IAAU;AAChB,aAAO,MAAM,CAAC,EAAE,OAAO,mBAAmB;AAAA,IAAA;AAAA,IAE5C;AACE,aAAO,OAAO,KAAK;AAAA,EAAA;AAEzB;AAEa,MAAA,gBAAgB,CAAC,OAAY,YAA4C;AACpF,QAAM,EAAE,aAAa,OAAO,IAAI,WAAW,CAAC;AAC5C,MAAI,OAAO,UAAU,eAAe,OAAO,gBAAgB,aAAa;AAC/D,WAAA;AAAA,EAAA;AAET,MAAI,UAAU,MAAM;AACX,WAAA;AAAA,EAAA;AAET,MAAI,iBAAiB,OAAO;AAC1B,UAAM,IAAI,WAAW,EAAE,OAAO;AACvB,WAAA,cAAc,GAAG,OAAO;AAAA,EAAA;AAEjC,MAAI,OAAO,UAAU,YAAY,iBAAiB,QAAQ;AAClD,UAAA,OAAO,EAAE,MAAM,MAAM,OAAO,MAAM,EAAE,MAAM,aAAa;AAC7D,QAAI,QAAQ,MAAM;AAChB,UAAI,QAAQ;AACH,eAAA;AAAA,MAAA;AAET,YAAM,IAAI,aAAa,WAAW,SAAS,KAAe,oCAAoC;AAAA,IAAA;AAEzF,WAAA;AAAA,EAAA;AAET,SAAO,QAAQ,KAAK;AACtB;AAEA,MAAM,kBAAkB;AAEX,MAAA,QAAQ,CAAC,OAAY,cAA+B;AACzD,QAAA,IAAI,UAAU,MAAM,eAAe;AAEnC,QAAA,CAAA,EAAG,OAAO,IAAI,SAAS,EAAE,IAAI,KAAK,CAAC;AACzC,MAAI,aAAkB;AACtB,MAAI,SAAS,OAAO,SAAS,OAAO,SAAS,QAAQ,SAAS,MAAM;AAC9D,QAAA,OAAO,UAAU,UAAU;AAC7B,mBAAa,WAAW,MAAM;AAAA,IAAA;AAEhC,YAAQ,MAAM;AAAA,MACZ,KAAK;AACI,eAAA,GAAG,OAAO,UAAU;AAAA,MAC7B,KAAK;AACI,eAAA,IAAI,OAAO,UAAU;AAAA,MAC9B,KAAK;AACI,eAAA,GAAG,OAAO,UAAU;AAAA,MAC7B,KAAK;AACI,eAAA,IAAI,OAAO,UAAU;AAAA,IAAA;AAAA,EAChC;AAGI,QAAA,SAAS,SAAS,MAAM,SAAS;AACvC,MAAI,WAAW,IAAI;AAET,YAAA,SAAS,QAAQ,UAAU,QAAQ;AAAA,EAAA;AAG7C,MAAI,OAAO,UAAU,YAAY,iBAAiB,QAAQ;AACxD,UAAM,WAAW,OACd,QAAQ,QAAQ,OAAO,EACvB,QAAQ,QAAQ,OAAO,EACvB,QAAQ,OAAO,MAAM,EACrB,QAAQ,OAAO,KAAK;AACvB,UAAM,QAAQ,OAAO,IAAI,QAAQ,KAAK,GAAG;AAClC,WAAA,MAAM,KAAK,KAAe,MAAM;AAAA,EAAA;AAElC,SAAA,GAAG,OAAO,UAAU,MAAM;AACnC;ACnKO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA,CAAC,mCAAmC,uCAAuC;AAC3E,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,kBAAkB;AAAA,MACjD,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,IACpD;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAE5E,SAAK,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ;AACzC,UAAI,eAAe,OAAO;AACxB,cAAM,WAAW,EAAE,OAAO,IAAA,CAAK;AAAA,MAAA;AAEjC,aAAO,OAAO,QAAQ,WAAW,MAAM,aAAa,GAAG;AAAA,IAAA,CACxD;AAAA,EAAA;AAAA,EAGO,KAAK,IAA+B,IAA+B;AAC3E,QAAI,OAAO,OAAO,YAAY,OAAO,OAAO,UAAU;AACpD,aAAO,KAAK;AAAA,IAAA;AAEd,QAAI,cAAc,QAAQ,UAAU,GAAG,EAAE,GAAG;AAC1C,aAAO,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE;AAAA,IAAA;AAEpC,QAAI,UAAU,GAAG,EAAE,KAAK,cAAc,MAAM;AAC1C,aAAO,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE;AAAA,IAAA;AAEpC,QAAI,cAAc,QAAQ,OAAO,OAAO,UAAU;AACzC,aAAA,MAAM,EAAE,EACZ,IAAI,KAAK,gBAAgB,QAAQ,EACjC,OAAO;AAAA,IAAA;AAEZ,QAAI,OAAO,OAAO,YAAY,cAAc,MAAM;AACzC,aAAA,MAAM,EAAE,EACZ,IAAI,KAAK,gBAAgB,QAAQ,EACjC,OAAO;AAAA,IAAA;AAER,QAAA;AACF,aAAO,aAAa,IAAI,EAAE,aAAa,EAAE,CAAC,IAAI,aAAa,IAAI,EAAE,aAAa,EAAA,CAAG;AAAA,aAC1E,GAAG;AACJ,YAAA,IAAI,aAAa,WAAW,wCAAwC;AAAA,IAAA;AAAA,EAC5E;AAEJ;AC9CO,MAAM,sBAAsB,aAAa;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA,CAAC,0CAA0C,uCAAuC;AAClF,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,oCAAoC;AAAA,MACnE,EAAE,MAAM,UAAU,aAAa,2CAA2C;AAAA,IAC5E;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAE9E,SAAK,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ;AACzC,UAAI,eAAe,OAAO;AACxB,cAAM,WAAW,EAAE,OAAO,IAAA,CAAK;AAAA,MAAA;AAEjC,aAAO,OAAO,QAAQ,WAAW,MAAM,aAAa,GAAG;AAAA,IAAA,CACxD;AAAA,EAAA;AAAA,EAGO,KAAK,IAA+B,IAA+B;AAC3E,QAAI,OAAO,OAAO,YAAY,OAAO,OAAO,UAAU;AACpD,aAAO,KAAK;AAAA,IAAA;AAEV,QAAA,cAAc,QAAQ,cAAc,MAAM;AACrC,aAAA,IAAI,UAAU,IAAI,EAAE;AAAA,IAAA;AAE7B,QAAI,cAAc,QAAQ,UAAU,GAAG,EAAE,GAAG;AAC1C,aAAO,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE;AAAA,IAAA;AAEpC,QAAI,UAAU,GAAG,EAAE,KAAK,cAAc,MAAM;AAC1C,aAAO,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE;AAAA,IAAA;AAEpC,QAAI,cAAc,QAAQ,OAAO,OAAO,UAAU;AACzC,aAAA,MAAM,EAAE,EACZ,SAAS,KAAK,gBAAgB,QAAQ,EACtC,OAAO;AAAA,IAAA;AAER,QAAA;AACF,aAAO,aAAa,IAAI,EAAE,aAAa,EAAE,CAAC,IAAI,aAAa,IAAI,EAAE,aAAa,EAAA,CAAG;AAAA,aAC1E,GAAG;AACJ,YAAA,IAAI,aAAa,WAAW,6CAA6C;AAAA,IAAA;AAAA,EACjF;AAEJ;AClDO,MAAM,yBAAyB,aAAa;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA,CAAC,uCAAuC,uCAAuC;AAC/E,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,WAAW,aAAa,gBAAgB;AAAA,MAChD,EAAE,MAAM,WAAW,aAAa,iBAAiB;AAAA,IACnD;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,gDAAgD;AAAA,IAAA;AAE5E,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,IAAY,IAAY;AACrC,WAAO,KAAK;AAAA,EAAA;AAEhB;AClBO,MAAM,uBAAuB,aAAa;AAAA,EAA1C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA,CAAC,yDAAyD,uCAAuC;AACjG,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,EAAE,MAAM,WAAW,aAAa,wCAAwC;AAAA,IAC1E;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,8CAA8C;AAAA,IAAA;AAE1E,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAC5D,QAAI,KAAK,SAAS,CAAC,MAAM,GAAG;AACpB,YAAA,IAAI,aAAa,WAAW,uCAAuC;AAAA,IAAA;AAAA,EAC3E;AAAA,EAGQ,KAAK,SAAiB,SAAiB;AAC/C,WAAO,UAAU;AAAA,EAAA;AAErB;ACxBO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,6CAA6C;AAC9C,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,EAAE,MAAM,WAAW,aAAa,wCAAwC;AAAA,IAC1E;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAEvE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAC5D,QAAI,KAAK,SAAS,CAAC,MAAM,GAAG;AACpB,YAAA,IAAI,aAAa,WAAW,uCAAuC;AAAA,IAAA;AAAA,EAC3E;AAAA,EAGQ,KAAK,IAAY,IAAY;AAE5B,YAAA,KAAK,KAAM,MAAM;AAAA,EAAA;AAE9B;ACvBO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,kDAAkD;AACnD,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,MACxD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,qCAAqC;AAAA,IAAA;AAEtE,UAAM,WAAqB,CAAC;AACvB,SAAA,SAAS,QAAQ,CAAC,QAAQ;AAC7B,UAAI,eAAe,OAAO;AACf,iBAAA;AAAA,UACP,GAAG,WAAW,EAAE,OAAO,IAAA,CAAK,EACzB,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,EAC5B,IAAI,CAAC,MAAM,aAAa,GAAG,EAAE,QAAQ,MAAM,CAAC;AAAA,QACjD;AACA;AAAA,MAAA;AAEF,eAAS,KAAK,aAAa,KAAK,EAAE,QAAQ,KAAA,CAAM,CAAC;AAAA,IAAA,CAClD;AACD,SAAK,WAAW;AAAA,EAAA;AAAA,EAGR,QAAQ,QAAkB;AAC9B,QAAA,OAAO,WAAW,GAAG;AAChB,aAAA;AAAA,IAAA;AAET,WAAO,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EAAA;AAExC;ACxCO,MAAM,uBAAuB,aAAa;AAAA,EAA1C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA,CAAC,4CAA4C,uCAAuC;AACpF,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,0CAA0C;AAAA,MACzE,EAAE,MAAM,UAAU,aAAa,yCAAyC;AAAA,IAC1E;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,8CAA8C;AAAA,IAAA;AAE1E,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,IAAY,IAAY;AACrC,WAAO,KAAK;AAAA,EAAA;AAEhB;ACnBO,MAAM,4BAA4B,aAAa;AAAA,EAA/C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,0CAA0C;AAC3C,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,MACrD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACd,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,QAAQ,QAAkB;AAClC,WAAO,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EAAA;AAExC;ACnBO,MAAM,mBAAmB,aAAa;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,eAAe;AAAA,MAC9C,EAAE,MAAM,UAAU,aAAa,sCAAsC;AAAA,IACvE;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,0CAA0C;AAAA,IAAA;AAAA,EAC3E;AAAA,EAGQ,KAAK,IAAS,IAAS;AACxB,WAAA,GAAG,IAAI,EAAE;AAAA,EAAA;AAEpB;ACpBO,MAAM,mBAAmB,aAAa;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,eAAe;AAAA,MAC9C,EAAE,MAAM,UAAU,aAAa,sCAAsC;AAAA,IACvE;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,0CAA0C;AAAA,IAAA;AAAA,EAC3E;AAAA,EAGQ,KAAK,IAAY,IAAY;AAC9B,WAAA,GAAG,IAAI,EAAE;AAAA,EAAA;AAEpB;ACpBO,MAAM,mBAAmB,aAAa;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,eAAe;AAAA,MAC9C,EAAE,MAAM,UAAU,aAAa,sCAAsC;AAAA,IACvE;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,0CAA0C;AAAA,IAAA;AAAA,EAC3E;AAAA,EAGQ,KAAK,IAAY,IAAY;AAC9B,WAAA,GAAG,IAAI,EAAE;AAAA,EAAA;AAEpB;ACpBO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,eAAe;AAAA,MAC9C,EAAE,MAAM,UAAU,aAAa,sCAAsC;AAAA,IACvE;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAAA,EAC5E;AAAA,EAGQ,KAAK,IAAY,IAAY;AAC9B,WAAA,IAAI,IAAI,EAAE;AAAA,EAAA;AAErB;ACpBO,MAAM,mBAAmB,aAAa;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,eAAe;AAAA,MAC9C,EAAE,MAAM,UAAU,aAAa,sCAAsC;AAAA,IACvE;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,0CAA0C;AAAA,IAAA;AAAA,EAC3E;AAAA,EAGQ,KAAK,IAAY,IAAY;AAC9B,WAAA,GAAG,IAAI,EAAE;AAAA,EAAA;AAEpB;ACpBO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,eAAe;AAAA,MAC9C,EAAE,MAAM,UAAU,aAAa,sCAAsC;AAAA,IACvE;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAAA,EAC5E;AAAA,EAGQ,KAAK,IAAY,IAAY;AAC9B,WAAA,IAAI,IAAI,EAAE;AAAA,EAAA;AAErB;ACrBO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,oEAAoE;AAChF,SAAA,WAAW,CAAC;AAAA,EAAA;AAAA,EAEF,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAAA,EAC5E;AAAA,EAGQ,OAAO;AACf,+BAAW,KAAK;AAAA,EAAA;AAEpB;ACdO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA,CAAC,qDAAqD,mDAAmD;AACzG,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,eAAe,aAAa,4BAA4B;AAAA,MAChE;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACd,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,cAAc,GAAG,CAAC;AAAA,EAAA;AAAA,EAGrD,QAAQ,QAAmB;AACnC,WAAO,OAAO,OAAO,CAAC,GAAG,MAAM,KAAK,CAAC;AAAA,EAAA;AAEzC;ACpBO,MAAM,mBAAmB,aAAa;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA,CAAC,mDAAmD,qDAAqD;AACzG,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,eAAe,aAAa,4BAA4B;AAAA,MAChE;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACd,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,cAAc,GAAG,CAAC;AAAA,EAAA;AAAA,EAGrD,QAAQ,QAAmB;AACnC,WAAO,OAAO,OAAO,CAAC,GAAG,MAAM,KAAK,CAAC;AAAA,EAAA;AAEzC;ACnBO,MAAM,mBAAmB,aAAa;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,aAAa,aAAa,+BAA+B;AAAA,MACjE;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,QAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,WAAW,GAAG;AAC5D,WAAK,SAAS,CAAC,IAAI,cAAc,KAAK,SAAS,CAAC,CAAC;AACjD;AAAA,IAAA;AAEI,UAAA,IAAI,aAAa,QAAQ,8EAA8E;AAAA,EAAA;AAAA,EAGrG,KAAK,WAAoB,IAAS,KAAU,OAAO;AAC3D,WAAO,YAAY,KAAK;AAAA,EAAA;AAE5B;AC3BO,MAAM,gBAAgB;AAAA,EAmB3B,YAAY,EAAE,MAAM,SAAwB;AAlBlC,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAAA;AAAA,IAEd;AAKE,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EAAA;AAAA,EAGL,WAAW;AACnB,QAAI,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,WAAW,GAAG;AACpD;AAAA,IAAA;AAEF,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAAA,EAGK,OAAO;AACZ,SAAK,SAAS;AACd,UAAM,CAAC,OAAO,YAAY,IAAI,KAAK;AAE/B,QAAA;AACK,aAAA,WAAW,EAAE,OAAO,MAAM,SAAS,EAAE,OAAO,KAAK,MAAO,CAAA,GAAG;AAAA,aAC3D,GAAG;AACH,aAAA,WAAW,EAAE,OAAO,6CAAc,SAAS,EAAE,OAAO,KAAK,MAAO,IAAG;AAAA,IAAA;AAAA,EAC5E;AAEJ;AC/CO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA,CAAC,mEAAmE,6BAA6B;AACjG,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AAC9B,WAAK,SAAS,CAAC,IAAI,cAAc,KAAK,SAAS,CAAC,CAAC;AACjD;AAAA,IAAA;AAEI,UAAA,IAAI,aAAa,QAAQ,yEAAyE;AAAA,EAAA;AAAA,EAGhG,KAAK,IAAa;AAC1B,WAAO,CAAC;AAAA,EAAA;AAEZ;ACpBO,MAAM,sBAAsB,aAAa;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,oDAAoD;AACrD,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,MACxD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,UAAM,WAAkB,CAAC;AACpB,SAAA,SAAS,IAAI,CAAC,QAAQ;AACzB,UAAI,eAAe,OAAO;AACxB,iBAAS,KAAK,GAAG,WAAW,EAAE,OAAO,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACzE;AAAA,MAAA;AAEO,eAAA,KAAK,aAAa,GAAG,CAAC;AAAA,IAAA,CAChC;AACD,SAAK,WAAW;AAAA,EAAA;AAAA,EAGR,QAAQ,QAAe;AAC/B,WAAO,OAAO,OAAO,CAAC,MAAM,OAAO,MAAM,QAAQ,EAAE;AAAA,EAAA;AAEvD;AC3BO,MAAM,wBAAwB,aAAa;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,yCAAyC;AAC1C,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,SAAS,aAAa,gBAAgB;AAAA,MAC9C;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,+CAA+C;AAAA,IAAA;AAEhF,SAAK,SAAS,CAAC,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC;AAAA,EAAA;AAAA,EAGxC,KAAK,OAAc,WAAmB;AAC9C,UAAM,SAAS,WAAW,EAAE,OAAO;AACnC,WAAO,OAAO,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,MAAW,MAAM,GAAG,SAAS,CAAC,EAAE;AAAA,EAAA;AAExF;ACpBO,MAAM,sBAAsB,aAAa;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,uCAAuC;AACxC,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,MACpD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,QAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,WAAW,GAAG;AACtD,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAE1E,QAAA,KAAK,SAAS,CAAC,KAAK,UAAa,KAAK,SAAS,CAAC,aAAa,OAAO;AAChE,YAAA,IAAI,aAAa,QAAQ,6BAA6B;AAAA,IAAA;AAE9D,SAAK,SAAS,CAAC,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC;AAAA,EAAA;AAAA,EAGxC,KAAK5D,QAAc,WAAmB,UAAiB;AAC3D,QAAA,EAAEA,kBAAiB,QAAQ;AAC7B,aAAO,MAAMA,QAAO,SAAS,IAAIA,SAAQ;AAAA,IAAA;AAE3C,UAAM,kBAAkB,WAAW,EAAE,OAAOA,QAAO;AACnD,QAAI,YAAY;AAChB,QAAI,UAAU;AACN,YAAA,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI;AAChD,YAAM,OAAiB;AAAA,QACrB;AAAA,QACA;AAAA,QACA,QAAQ,MAAM,SAAS,WAAW;AAAA,QAClC,OAAO,OAAO,SAAS,WAAW;AAAA,MACpC;AACY,kBAAA,WAAW,EAAE,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG;AAAA,IAAA;AAEzD,QAAI,QAAQ;AACI,oBAAA;AAAA,MAAQ,CAAC,KAAK,MAC5B,IAAI,QAAQ,CAAC,GAAG,MAAM;;AACd,cAAA,IAAI,WAAW,EAAE,SAAO,eAAU,CAAC,MAAX,mBAAe,OAAM,GAAG;AACtD,YAAI,OAAO,MAAM,YAAY,MAAM,GAAG,SAAS,GAAG;AACvC,mBAAA;AAAA,QAAA;AAAA,MAEZ,CAAA;AAAA,IACH;AACO,WAAA;AAAA,EAAA;AAEX;ACtDO,MAAM,wBAAwB,aAAa;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,OAAO,aAAa,cAAc;AAAA,MAC1C;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aACE;AAAA,QACF,QAAQ;AAAA,MAAA;AAAA,IAEZ;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,QAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,WAAW,GAAG;AACtD,YAAA,IAAI,aAAa,QAAQ,+CAA+C;AAAA,IAAA;AAEhF,QAAI,KAAK,SAAS,CAAC,aAAa,OAAO;AAChC,WAAA,SAAS,CAAC,IAAI,WAAW,EAAE,OAAO,KAAK,SAAS,CAAC,GAAG;AAAA,IAAA;AAE3D,QAAI,EAAE,KAAK,SAAS,CAAC,aAAa,QAAQ;AAClC,YAAA,IAAI,aAAa,SAAS,4BAA4B;AAAA,IAAA;AAE9D,SAAK,SAAS,CAAC,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC;AAC3C,SAAA,SAAS,CAAC,IAAI,cAAc,KAAK,SAAS,CAAC,GAAG,EAAE,aAAa,KAAA,CAAM;AAAA,EAAA;AAAA,EAGhE,KAAK,KAAUA,QAAc,OAAe,UAAmB;;AACvE,UAAM,SAAS,WAAW,EAAE,OAAOA,QAAO;AAC1C,QAAI,UAAU;AACZ,UAAI,OAAO;AACX,eAAS,IAAI,GAAG,KAAKA,OAAM,WAAA,GAAc,KAAK;AAC5C,cAAM,KAAI,YAAO,CAAC,MAAR,mBAAY;AACtB,YAAI,KAAK,MAAM;AACb;AAAA,QAAA;AAEF,YAAI,KAAK,KAAK;AACL,iBAAA;AAAA,QAAA,OACF;AACL;AAAA,QAAA;AAAA,MACF;AAEF,UAAI,SAAS,IAAI;AACf,gBAAO,YAAO,IAAI,MAAX,mBAAe,QAAQ;AAAA,MAAC;AAAA,IACjC,OACK;AACL,eAAS,IAAI,GAAG,KAAKA,OAAM,WAAA,GAAc,KAAK;AAC5C,cAAI,YAAO,CAAC,MAAR,mBAAY,QAAO,KAAK;AAC1B,kBAAO,YAAO,CAAC,MAAR,mBAAY,QAAQ;AAAA,QAAC;AAAA,MAC9B;AAAA,IACF;AAEF,UAAM,IAAI,aAAa,QAAQ,wBAAwB,GAAG,IAAI;AAAA,EAAA;AAElE;AChEO,MAAM,wBAAwB,aAAa;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,OAAO,aAAa,cAAc;AAAA,MAC1C;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aACE;AAAA,QACF,QAAQ;AAAA,MAAA;AAAA,IAEZ;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,QAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,WAAW,GAAG;AACtD,YAAA,IAAI,aAAa,QAAQ,+CAA+C;AAAA,IAAA;AAEhF,QAAI,KAAK,SAAS,CAAC,aAAa,OAAO;AAChC,WAAA,SAAS,CAAC,IAAI,WAAW,EAAE,OAAO,KAAK,SAAS,CAAC,GAAG;AAAA,IAAA;AAE3D,QAAI,EAAE,KAAK,SAAS,CAAC,aAAa,QAAQ;AAClC,YAAA,IAAI,aAAa,SAAS,4BAA4B;AAAA,IAAA;AAE9D,SAAK,SAAS,CAAC,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC;AAC3C,SAAA,SAAS,CAAC,IAAI,cAAc,KAAK,SAAS,CAAC,GAAG,EAAE,aAAa,KAAA,CAAM;AAAA,EAAA;AAAA,EAGhE,KAAK,KAAUA,QAAc,OAAe,UAAmB;;AACvE,UAAM,SAAS,WAAW,EAAE,OAAOA,QAAO;AAC1C,QAAI,UAAU;AACZ,UAAI,OAAO;AACX,eAAS,IAAI,GAAG,KAAKA,OAAM,WAAA,GAAc,KAAK;AAC5C,cAAM,KAAI,YAAO,CAAC,MAAR,mBAAY;AACtB,YAAI,KAAK,MAAM;AACb;AAAA,QAAA;AAEF,YAAI,KAAK,KAAK;AACL,iBAAA;AAAA,QAAA,OACF;AACL;AAAA,QAAA;AAAA,MACF;AAEF,UAAI,SAAS,IAAI;AACf,gBAAO,YAAO,QAAQ,CAAC,MAAhB,mBAAoB;AAAA,MAAI;AAAA,IACjC,OACK;AACL,eAAS,IAAI,GAAG,KAAKA,OAAM,WAAA,GAAc,KAAK;AAC5C,cAAI,YAAO,CAAC,MAAR,mBAAY,QAAO,KAAK;AAC1B,kBAAO,YAAO,QAAQ,CAAC,MAAhB,mBAAoB;AAAA,QAAC;AAAA,MAC9B;AAAA,IACF;AAEF,UAAM,IAAI,aAAa,QAAQ,wBAAwB,GAAG,IAAI;AAAA,EAAA;AAElE;AClEO,MAAM,sBAAsB,aAAa;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,SAAS,aAAa,oBAAoB;AAAA,MAClD,EAAE,MAAM,KAAK,aAAa,4DAA4D,UAAU,KAAK;AAAA,MACrG,EAAE,MAAM,KAAK,aAAa,kEAAkE,UAAU,KAAK;AAAA,IAC7G;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,QAAI,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,GAAG;AAClD,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAG9E,QAAI,EAAE,KAAK,SAAS,CAAC,aAAa,QAAQ;AAClC,YAAA,IAAI,aAAa,WAAW,iCAAiC;AAAA,IAAA;AAGjE,QAAA,KAAK,SAAS,UAAU,GAAG;AAC7B,WAAK,SAAS,CAAC,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC;AAChD,UAAI,KAAK,SAAS,CAAC,IAAI,GAAG;AAClB,cAAA,IAAI,aAAa,WAAW,gDAAgD;AAAA,MAAA;AAAA,IACpF;AAGE,QAAA,KAAK,SAAS,WAAW,GAAG;AAC9B,WAAK,SAAS,CAAC,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC;AAChD,UAAI,KAAK,SAAS,CAAC,IAAI,GAAG;AAClB,cAAA,IAAI,aAAa,WAAW,mDAAmD;AAAA,MAAA;AAAA,IACvF;AAAA,EACF;AAAA,EAGQ,KAAK,OAAc,GAAY,GAAY;AAC7C,UAAA,OAAO,MAAM,QAAQ;AAC3B,QAAI,GAAG;AACL,UAAI,IAAI,KAAK,IAAI,MAAM,WAAW,CAAC,GAAG;AACpC,cAAM,IAAI,aAAa,SAAS,cAAc,CAAC,mBAAmB;AAAA,MAAA;AAEpE,WAAK,MAAM,KAAK,SAAS,KAAK,MAAM,IAAI;AAAA,IAAA;AAE1C,QAAI,GAAG;AACL,UAAI,IAAI,KAAK,IAAI,MAAM,WAAW,CAAC,GAAG;AACpC,cAAM,IAAI,aAAa,SAAS,iBAAiB,CAAC,mBAAmB;AAAA,MAAA;AAEvE,WAAK,OAAO,KAAK,QAAQ,KAAK,OAAO,IAAI;AAAA,IAAA;AAEpC,WAAA,MAAM,KAAK,IAAI;AAAA,EAAA;AAE1B;AClDO,MAAM,sBAAsB,aAAa;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,cAAc,aAAa,2BAA2B;AAAA,MAC9D,EAAE,MAAM,SAAS,aAAa,0BAA0B;AAAA,MACxD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,QAAI,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,GAAG;AAClD,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAG9E,QAAI,KAAK,SAAS,CAAC,aAAa,OAAO;AAChC,WAAA,SAAS,CAAC,IAAI,WAAW,EAAE,OAAO,KAAK,SAAS,CAAC,GAAG;AAAA,IAAA;AAG3D,QAAI,EAAE,KAAK,SAAS,CAAC,aAAa,QAAQ;AAClC,YAAA,IAAI,aAAa,WAAW,kCAAkC;AAAA,IAAA;AAGlE,QAAA,KAAK,SAAS,WAAW,GAAG;AAC9B,WAAK,SAAS,CAAC,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC;AAC5C,UAAA,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,GAAG;AACpC,cAAA,IAAI,aAAa,WAAW,iCAAiC;AAAA,MAAA;AAAA,IACrE,OACK;AACA,WAAA,SAAS,CAAC,IAAI;AAAA,IAAA;AAAA,EACrB;AAAA,EAGQ,KAAK,WAAgBA,QAAc,aAAqB,GAAG;;AACnE,UAAM,SAAS,WAAW,EAAE,OAAOA,QAAO;AAE1C,UAAM,UAAU,OAAO;AACvB,UAAM,YAAU,YAAO,CAAC,MAAR,mBAAW,WAAU;AACjC,QAAA,EAAG,YAAY,KAAK,WAAW,KAAO,YAAY,KAAK,WAAW,IAAK;AACnE,YAAA,IAAI,aAAa,QAAQ,8CAA8C;AAAA,IAAA;AAEzE,UAAA,QAAQ,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,GAAG,GAAG,EAAE;AAEzD,QAAA,MAAM,WAAW,GAAG;AAChB,YAAA,IAAI,aAAa,QAAQ,iBAAiB;AAAA,IAAA;AAGlD,YAAQ,YAAY;AAAA,MAClB,KAAK;AACH,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACjC,cAAA,MAAM,CAAC,MAAM,WAAW;AAC1B,mBAAO,IAAI;AAAA,UAAA;AAAA,QACb;AAEI,cAAA,IAAI,aAAa,QAAQ,2BAA2B;AAAA,MAE5D,KAAK;AACH,iBAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AACtC,cAAA,MAAM,CAAC,KAAK,WAAW;AACzB,mBAAO,IAAI;AAAA,UAAA;AAAA,QACb;AAEI,cAAA,IAAI,aAAa,QAAQ,8CAA8C;AAAA,MAE/E,KAAK;AACH,YAAI,UAAU;AACd,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAI,OAAO,MAAM,CAAC,CAAC,KAAK,OAAO,SAAS,GAAG;AAC/B,sBAAA;AAAA,UAAA;AAAA,QACZ;AAEF,YAAI,YAAY,IAAI;AAClB,iBAAO,UAAU;AAAA,QAAA;AAEb,cAAA,IAAI,aAAa,QAAQ,iDAAiD;AAAA,MAElF;AACQ,cAAA,IAAI,aAAa,WAAW,sBAAsB;AAAA,IAAA;AAAA,EAC5D;AAEJ;ACzFO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,uEAAuE;AACxE,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,EAAE,MAAM,QAAQ,aAAa,iCAAiC;AAAA,IAChE;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAEvE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAC5D,QAAI,KAAK,SAAS,CAAC,KAAK,GAAG;AACnB,YAAA,IAAI,aAAa,QAAQ,8BAA8B;AAAA,IAAA;AAE/D,QAAI,KAAK,SAAS,CAAC,KAAK,GAAG;AACnB,YAAA,IAAI,aAAa,QAAQ,6BAA6B;AAAA,IAAA;AAAA,EAC9D;AAAA,EAGQ,KAAK,OAAe,MAAc;AAC1C,WAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AAAA,EAAA;AAE5C;AC3BO,MAAM,sBAAsB,aAAa;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,6BAA6B;AAC9B,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAEzE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAC5D,QAAI,KAAK,SAAS,CAAC,KAAK,GAAG;AACnB,YAAA,IAAI,aAAa,QAAQ,8BAA8B;AAAA,IAAA;AAAA,EAC/D;AAAA,EAGQ,KAAK,OAAe;AACrB,WAAA,KAAK,MAAM,KAAK;AAAA,EAAA;AAE3B;ACvBO,MAAM,mBAAmB,aAAa;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,4BAA4B;AAC7B,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,0CAA0C;AAAA,IAAA;AAEtE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAC5D,QAAI,KAAK,SAAS,CAAC,KAAK,GAAG;AACnB,YAAA,IAAI,aAAa,QAAQ,8BAA8B;AAAA,IAAA;AAAA,EAC/D;AAAA,EAGQ,KAAK,OAAe;AACrB,WAAA,KAAK,IAAI,KAAK;AAAA,EAAA;AAEzB;ACvBO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,wCAAwC;AACpD,SAAA,WAAW,CAAC,EAAE,MAAM,SAAS,aAAa,iBAAiB;AAAA,EAAA;AAAA,EAEjD,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAEvE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,OAAe;AACrB,WAAA,KAAK,IAAI,KAAK;AAAA,EAAA;AAEzB;ACdO,MAAM,wBAAwB,aAAa;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,sDAAsD;AACvD,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,MACxD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,UAAM,WAAqB,CAAC;AACvB,SAAA,SAAS,QAAQ,CAAC,QAAQ;AAC7B,UAAI,eAAe,OAAO;AACf,iBAAA;AAAA,UACP,GAAG,WAAW,EAAE,OAAO,IAAK,CAAA,EACzB,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,EAC5B,OAAO,CAAC,MAAW,OAAO,MAAM,QAAQ;AAAA,QAC7C;AACA;AAAA,MAAA;AAEO,eAAA,KAAK,aAAa,GAAG,CAAC;AAAA,IAAA,CAChC;AACD,SAAK,WAAW;AAAA,EAAA;AAAA,EAGR,QAAQ,QAAkB;AAClC,WAAO,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EAAA;AAExC;AClCO,MAAM,qBAAqB,aAAa;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,0CAA0C;AACtD,SAAA,WAAW,CAAC;AAAA,EAAA;AAAA,EAEF,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,4CAA4C;AAAA,IAAA;AAAA,EAC7E;AAAA,EAGQ,OAAO;AACf,WAAO,KAAK,OAAO;AAAA,EAAA;AAEvB;ACdO,MAAM,mBAAmB,aAAa;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,0BAA0B;AACtC,SAAA,WAAW,CAAC;AAAA,EAAA;AAAA,EAEF,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,0CAA0C;AAAA,IAAA;AAAA,EAC3E;AAAA,EAGQ,OAAO;AACf,WAAO,KAAK;AAAA,EAAA;AAEhB;ACbO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,iEAAiE;AAClE,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAEvE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,UAAkB;AACxB,WAAA,KAAK,IAAI,QAAQ;AAAA,EAAA;AAE5B;ACpBO,MAAM,wBAAwB,aAAa;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,4CAA4C;AAC7C,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,+CAA+C;AAAA,IAAA;AAE3E,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,OAAe;AACpB,WAAA,QAAQ,MAAO,KAAK;AAAA,EAAA;AAEhC;ACpBO,MAAM,sBAAsB,aAAa;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,6CAA6C;AAC9C,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,QAAQ,aAAa,4CAA4C;AAAA,MACzE,EAAE,MAAM,YAAY,aAAa,iCAAiC;AAAA,IACpE;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAEzE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,MAAc,UAAkB;AACtC,WAAA,KAAK,IAAI,MAAM,QAAQ;AAAA,EAAA;AAElC;AClBO,MAAM,qBAAqB,aAAa;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,wDAAwD;AACzD,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,4CAA4C;AAAA,IAAA;AAExE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAC5D,QAAI,KAAK,SAAS,CAAC,IAAI,GAAG;AAClB,YAAA,IAAI,aAAa,QAAQ,kCAAkC;AAAA,IAAA;AAAA,EACnE;AAAA,EAGQ,KAAK,OAAe;AACrB,WAAA,KAAK,KAAK,KAAK;AAAA,EAAA;AAE1B;ACvBO,MAAM,sBAAsB,aAAa;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,uFAAuF;AACxF,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,QAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,WAAW,GAAG;AACtD,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAEzE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,OAAe,QAAQ,GAAG;AACvC,UAAM,aAAa,KAAK,IAAI,IAAI,KAAK;AACrC,WAAO,KAAK,MAAM,QAAQ,UAAU,IAAI;AAAA,EAAA;AAE5C;AC1BO,MAAM,wBAAwB,aAAa;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,0FAA0F;AAC3F,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,QAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,WAAW,GAAG;AACtD,YAAA,IAAI,aAAa,QAAQ,+CAA+C;AAAA,IAAA;AAE3E,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,OAAe,QAAQ,GAAG;AACvC,UAAM,aAAa,KAAK,IAAI,IAAI,KAAK;AACrC,WAAO,KAAK,KAAK,QAAQ,UAAU,IAAI;AAAA,EAAA;AAE3C;AC1BO,MAAM,0BAA0B,aAAa;AAAA,EAA7C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,4FAA4F;AAC7F,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,QAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,WAAW,GAAG;AACtD,YAAA,IAAI,aAAa,QAAQ,iDAAiD;AAAA,IAAA;AAE7E,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,OAAe,QAAQ,GAAG;AACvC,UAAM,aAAa,KAAK,IAAI,IAAI,KAAK;AACrC,WAAO,KAAK,MAAM,QAAQ,UAAU,IAAI;AAAA,EAAA;AAE5C;AC1BO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,oDAAoD;AACrD,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAEvE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,OAAe;AACrB,WAAA,KAAK,IAAI,KAAK;AAAA,EAAA;AAEzB;ACpBO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,oDAAoD;AACrD,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAEvE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,OAAe;AACrB,WAAA,KAAK,IAAI,KAAK;AAAA,EAAA;AAEzB;ACpBO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,oDAAoD;AACrD,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAEvE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,OAAe;AACrB,WAAA,KAAK,IAAI,KAAK;AAAA,EAAA;AAEzB;ACpBO,MAAM,qBAAqB,aAAa;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,kDAAkD;AACnD,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,4CAA4C;AAAA,IAAA;AAExE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AACxD,QAAA,KAAK,KAAK,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,GAAG;AAC3C,YAAA,IAAI,aAAa,SAAS,gCAAgC;AAAA,IAAA;AAAA,EAClE;AAAA,EAGQ,KAAK,OAAe;AACrB,WAAA,KAAK,KAAK,KAAK;AAAA,EAAA;AAE1B;ACvBO,MAAM,qBAAqB,aAAa;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,kDAAkD;AACnD,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,4CAA4C;AAAA,IAAA;AAExE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AACxD,QAAA,KAAK,KAAK,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,GAAG;AAC3C,YAAA,IAAI,aAAa,SAAS,gCAAgC;AAAA,IAAA;AAAA,EAClE;AAAA,EAGQ,KAAK,OAAe;AACrB,WAAA,KAAK,KAAK,KAAK;AAAA,EAAA;AAE1B;ACvBO,MAAM,qBAAqB,aAAa;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,kDAAkD;AACnD,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,4CAA4C;AAAA,IAAA;AAExE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,OAAe;AACrB,WAAA,KAAK,KAAK,KAAK;AAAA,EAAA;AAE1B;ACpBO,MAAM,sBAAsB,aAAa;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACC,SAAA,WAAA;AAAA,MACT;AAAA,IACF;AACW,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAEzE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,GAAW,GAAW;AAC5B,WAAA,KAAK,MAAM,GAAG,CAAC;AAAA,EAAA;AAE1B;ACzBO,MAAM,uBAAuB,aAAa;AAAA,EAA1C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,+CAA+C;AAChD,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,MACxD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,UAAM,WAAkB,CAAC;AACpB,SAAA,SAAS,IAAI,CAAC,QAAQ;AACzB,UAAI,eAAe,OAAO;AACxB,iBAAS,KAAK,GAAG,WAAW,EAAE,OAAO,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACzE;AAAA,MAAA;AAEO,eAAA,KAAK,aAAa,GAAG,CAAC;AAAA,IAAA,CAChC;AACD,SAAK,WAAW;AAAA,EAAA;AAAA,EAGR,QAAQ,QAAe;AACxB,WAAA,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,MAAM,EAAE,EAAE;AAAA,EAAA;AAEvD;AC3BO,MAAM,wBAAwB,aAAa;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,sDAAsD;AACvD,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,MACxD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACnB,UAAM,WAAqB,CAAC;AACvB,SAAA,SAAS,IAAI,CAAC,QAAQ;AACzB,UAAI,eAAe,OAAO;AACf,iBAAA;AAAA,UACP,GAAG,WAAW,EAAE,OAAO,IAAK,CAAA,EACzB,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,EAC5B,OAAO,CAAC,MAAW,OAAO,MAAM,QAAQ;AAAA,QAC7C;AACA;AAAA,MAAA;AAEO,eAAA,KAAK,aAAa,GAAG,CAAC;AAAA,IAAA,CAChC;AACG,QAAA,SAAS,WAAW,GAAG;AACnB,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAE9E,SAAK,WAAW;AAAA,EAAA;AAAA,EAGR,QAAQ,QAAkB;AAC3B,WAAA,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,OAAO;AAAA,EAAA;AAEnD;ACnCO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,kDAAkD;AACnD,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,MACxD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAE9E,UAAM,WAAqB,CAAC;AACvB,SAAA,SAAS,IAAI,CAAC,QAAQ;AACzB,UAAI,eAAe,OAAO;AACf,iBAAA;AAAA,UACP,GAAG,WAAW,EAAE,OAAO,IAAK,CAAA,EACzB,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,EAC5B,OAAO,CAAC,MAAW,OAAO,MAAM,QAAQ;AAAA,QAC7C;AACA;AAAA,MAAA;AAEO,eAAA,KAAK,aAAa,GAAG,CAAC;AAAA,IAAA,CAChC;AACD,SAAK,WAAW;AAAA,EAAA;AAAA,EAGR,QAAQ,QAAkB;AAC9B,QAAA,OAAO,WAAW,GAAG;AAChB,aAAA;AAAA,IAAA;AAEF,WAAA,KAAK,IAAI,GAAG,MAAM;AAAA,EAAA;AAE7B;ACtCO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,kDAAkD;AACnD,SAAA,WAAA;AAAA,MACT,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,MACxD;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,6CAA6C;AAAA,IAAA;AAE9E,UAAM,WAAqB,CAAC;AACvB,SAAA,SAAS,IAAI,CAAC,QAAQ;AACzB,UAAI,eAAe,OAAO;AACf,iBAAA;AAAA,UACP,GAAG,WAAW,EAAE,OAAO,IAAK,CAAA,EACzB,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,EAC5B,OAAO,CAAC,MAAW,OAAO,MAAM,QAAQ;AAAA,QAC7C;AACA;AAAA,MAAA;AAEO,eAAA,KAAK,aAAa,GAAG,CAAC;AAAA,IAAA,CAChC;AACD,SAAK,WAAW;AAAA,EAAA;AAAA,EAGR,QAAQ,QAAkB;AAC9B,QAAA,OAAO,WAAW,GAAG;AAChB,aAAA;AAAA,IAAA;AAEF,WAAA,KAAK,IAAI,GAAG,MAAM;AAAA,EAAA;AAE7B;ACxCO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,iCAAiC;AAClC,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAE5E,SAAK,WAAW,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,EAAA;AAAA,EAGvC,KAAK,MAAc;AAC3B,WAAO,KAAK;AAAA,EAAA;AAEhB;ACpBO,MAAM,qBAAqB,aAAa;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,0DAA0D;AAC3D,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EAAA;AAAA,EAEU,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,4CAA4C;AAAA,IAAA;AAE7E,SAAK,WAAW,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,EAAA;AAAA,EAGvC,KAAK,MAAc;AAC3B,WAAO,mBAAmB,IAAI,EAAE,QAAQ,QAAQ,GAAG,EAAE;AAAA,EAAA;AAEzD;ACpBO,MAAM,uBAAuB,aAAa;AAAA,EAA1C,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,8DAA8D;AAC1E,SAAA,WAAW,CAAC,EAAE,MAAM,UAAU,aAAa,qCAAqC;AAAA,EAAA;AAAA,EAEtE,WAAW;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AACxB,YAAA,IAAI,aAAa,QAAQ,4CAA4C;AAAA,IAAA;AAExE,SAAA,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC;AAAA,EAAA;AAAA,EAGpD,KAAK,IAAY;AACzB,WAAO,CAAC;AAAA,EAAA;AAEZ;ACfO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,6CAA6C;AAC9C,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,QAAQ;AAAA,MAAA;AAAA,IAEZ;AAAA,EAAA;AAAA,EAEU,WAAW;;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AAC9B,WAAK,WAAW,GAAC,UAAK,WAAL,mBAAa,MAAK,CAAC;AAAA,IAC3B,WAAA,KAAK,SAAS,WAAW,GAAG;AAC/B,YAAA,QAAQ,KAAK,SAAS,CAAC;AACxB,WAAA,WAAW,CAAC,MAAM,GAAG;AAAA,IAAA,OACrB;AACC,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAAA,EAC5E;AAAA,EAGQ,KAAK,KAAa;AACnB,WAAA;AAAA,EAAA;AAEX;ACzBO,MAAM,oBAAoB,aAAa;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AACK,SAAA,UAAA;AACV,SAAA,WAAW,CAAC,6CAA6C;AAC9C,SAAA,WAAA;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,QAAQ;AAAA,MAAA;AAAA,IAEZ;AAAA,EAAA;AAAA,EAEU,WAAW;;AACf,QAAA,KAAK,SAAS,WAAW,GAAG;AAC9B,WAAK,WAAW,GAAC,UAAK,WAAL,mBAAa,MAAK,CAAC;AAAA,IAC3B,WAAA,KAAK,SAAS,WAAW,GAAG;AAC/B,YAAA,QAAQ,KAAK,SAAS,CAAC;AACxB,WAAA,WAAW,CAAC,MAAM,IAAI;AAAA,IAAA,OACtB;AACC,YAAA,IAAI,aAAa,QAAQ,2CAA2C;AAAA,IAAA;AAAA,EAC5E;AAAA,EAGQ,KAAK,MAAc;AACpB,WAAA;AAAA,EAAA;AAEX;AC8BO,MAAM,YAA6B;AAAA,EACxC,KAAK;AAAA,EACL,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,WAAW;AAAA,EACX,SAAS;AAAA,EACT,IAAI;AAAA;AAAA,EAEJ,SAAS;AAAA,EACT,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR;ACxEO,MAAM,KAAK;AAAA,EAkFhB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,IACZ,WAAW,CAAC;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAe,IAAI;AAlGC,SAAA,YAAA;AACD,SAAA,WAAA;AACnB,SAAA,OAAsB,CAAC;AACvB,SAAA,iBAAiC,CAAC;AAClC,SAAA,oBAAuC,CAAC;AACd,SAAA,kBAAA;AACA,SAAA,kBAAA;AACD,SAAA,iBAAA;AACA,SAAA,iBAAA;AACzB,SAAA,qBAA8D,CAAC;AACrB,SAAA,cAAA;AAC1C,SAAA,mCAAiC,IAAI;AACZ,SAAA,iBAAA;AACD,SAAA,cAAA;AACL,SAAA,UAAA;AACnB,SAAA,YAA2B,CAAC;AACL,SAAA,eAAA;AACA,SAAA,eAAA;AAGf,SAAA,QAAA;AACR,SAAA,YAA6B,CAAC;AAC9B,SAAA,YAA6D,CAAC;AAC9D,SAAA,UAAuD,CAAC;AACxD,SAAA,WAAsE,CAAC;AACvE,SAAA,WAAwD,CAAC;AAYzD,SAAA,WAA6C,CAAC,WAA2B;AAAA,IAEzE;AA4DE,QAAI,gBAAgB,MAAM;AACxB,WAAK,eAAe;AAAA,IAAA;AAEtB,SAAK,YAAY;AAAA,MACf,GAAG6D;AAAAA,MACH,GAAG;AAAA,IACL;AACA,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAAA;AAAA,EA9ET,kBAAkB;AACnB,QAAA,KAAK,SAAS,OAAO,KAAK,KAAK,iBAAiB,EAAE,WAAW,GAAG;AAClE;AAAA,IAAA;AAEF,UAAM,OAAO,OAAO,KAAK,KAAK,iBAAiB;AAC/C,UAAM,OAA4B,CAAC;AACnC,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAC9B,YAAA,UAAU,KAAK,CAAC;AAChB,YAAA,gBAAgB,KAAK,kBAAkB,OAAO;AAC9C,YAAA,QAAQ,cAAc,MAAM,cAAc;AAChD,UAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC;AAAA,MAAA;AAEF,WAAK,KAAK,aAAa;AAAA,IAAA;AAEzB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,EAAE,OAAO,aAAa,KAAK,CAAC;AAC5B,YAAA,QAAQ,MAAM,cAAc;AAClC,UAAI,CAAC,OAAO;AACV;AAAA,MAAA;AAEF,YAAM,gBAAgB;AACb,eAAA,YAAY,KAAK,CAAC;AAAA,IAAA;AAE7B,SAAK,QAAQ;AAAA,EAAA;AAAA,EAGR,UAAU,IAAQ,OAAsB;AACvC,UAAA,OAAO,KAAK,KAAK,EAAE;AACzB,QAAI,6BAAM,QAAQ;AAChB,aAAO,KAAK;AAAA,IAAA;AAEP,WAAA;AAAA,MACL;AAAA,MACA,SAAS,MAAM;AAAA,MACf,+BAAe,KAAK;AAAA,MACpB,gCAAgB,IAAI;AAAA,IACtB;AAAA,EAAA;AA2CJ;AAIO,MAAM,aAAa,CAAC,QAAmB,OAAO;AAC5C,SAAA,IAAI,KAAK,KAAK;AACvB;AAMO,MAAM,YAAY,CAAC,QAAmB,OAAgB;AAC3D,SAAO,EAAE,MAAM,WAAW,KAAK,EAAE;AACnC;AAEO,MAAM,SAAS,CAAC,QAAmB,OAAO;AACzC,QAAA,CAAC,KAAK,MAAM,IAAI,SAAkB,MAAM,UAAU,KAAK,CAAC;AACxD,QAAA,EAAE,SAAS;AACZ,OAAA,WAAW,CAAC,UAA0B;AAClC,WAAA,OAAO,MAAM,KAAK;AACrB,QAAA,CAAC,KAAK,OAAO;AACf;AAAA,IAAA;AAEF,0BAAsB,MAAM,OAAO,EAAE,KAAM,CAAA,CAAC;AAAA,EAC9C;AACA,YAAU,MAAM;AACP,WAAA,OAAO,MAAM,KAAK;AAAA,EAAA,GACxB,CAAC,KAAK,CAAC;AACH,SAAA;AACT;AChKO,MAAM,OAAkC;AAAA,EAC7C,YAAY,OAAqB;AAC1B,SAAA,YAAY,+BAAO,MAAM;AAAA,EAAA;AAAA,EAGxB,YAAY,QAA4B;AAC9C,QAAI,UAAU,MAAM;AAClB;AAAA,IAAA;AAEF,eAAW,SAAS,QAAQ;AAC1B,iBAAW,OAAO,OAAO;AACtB,aAAa,GAAG,IAAK,MAAc,GAAG;AAAA,MAAA;AAAA,IACzC;AAAA,EACF;AAAA,EAGK,WAAW,OAA6B;AACtC,WAAA,EAAE,OAAO,KAAK;AAAA,EAAA;AAAA,EAGhB,OAAO,OAAsB;AAClC,UAAM,EAAE,OAAO,OAAO,MAAU,IAAA;AAC1B,UAAA,UAAU,KAAK,WAAW;AAC1B,UAAA,QAAQ,QAAQ,UAAU,CAAC,WAAW,OAAO,WAAU,+BAAO,MAAK;AACzE,QAAI,QAAQ,SAAS,KAAK,UAAU,IAAI;AACtC,aAAO,EAAE,GAAG,OAAO,GAAG,KAAK,WAAW,EAAE,OAAO,OAAO,OAAO,+BAAO,MAAO,CAAA,EAAE;AAAA,IAAA;AAExE,WAAA;AAAA,EAAA;AAAA,EAGF,SAAS,OAAiD;AACzD,UAAA,EAAE,UAAU;AACX,WAAA;AAAA,EAAA;AAAA,EAGF,SAAS,OAAiD;AACzD,UAAA,QAAQ,KAAK,OAAO,KAAK;AAC/B,WAAO,KAAK,SAAS,EAAE,GAAG,OAAO,OAAO;AAAA,EAAA;AAAA,EAGnC,OAAO,OAA4B;AAClC,UAAA,EAAE,OAAO,MAAA,IAAU;AACzB,WAAO,MAAM,UAAU,EAAE,MAAA,CAAO,KAAK;AAAA,EAAA;AAAA,EAGhC,aAA6B;AAClC,WAAO,CAAC;AAAA,EAAA;AAEZ;AAGa,MAAA,gBAAgB,IAAI,OAAO;ACvFjC,MAAM,mBAAmB;AAAA,EAK9B,YAAY,OAAc;AAJ1B,SAAO,MAAwB,CAAC;AAExB,SAAA,mCAA4B,IAAQ;AAG1C,SAAK,QAAQ;AAAA,EAAA;AAAA,EAGf,oBAAoB,KAAW;AACzB,QAAA,QAAQ,CAAC,OAAO;;AAClB,YAAM,OAAO,KAAK,MAAM,KAAK,KAAK,EAAE;AACpC,+CAAM,WAAN,mBAAc,eAAd,mBAA0B,QAAQ,CAAC,QAAQ;AACpC,aAAA,aAAa,IAAI,GAAG;AAAA,MAAA;AAAA,IAC1B,CACF;AAAA,EAAA;AAAA,EAGH,kBAAkB1D,YAAiE;AACjF,SAAK,MAAM,mBAAmB;AAC9B,UAAM,aAA4B,CAAC;AAC9B,SAAA,aAAa,QAAQ,CAAC,OAAO;AAChC,YAAM,MAAM,KAAK,MAAM,KAAK,KAAK,EAAE;AACnC,UAAI,OAAO,MAAM;AACf;AAAA,MAAA;AAEF,iBAAW,EAAE,IAAI,EAAE,GAAG,IAAI;AACtB,UAAA,QAAQ,gBAAgB,IAAI,OAAO;AAAA,QACrC,YAAY;AAAA,QACZ,OAAO,KAAK;AAAA,QACZ,OAAO,KAAK;AAAA,QACZ,WAAAA;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAEM,WAAA;AAAA,EAAA;AAEX;ACkBA,MAAM,WAAuB,MAAM;AAqH5B,MAAM,MAA2B;AAAA,EAqBtC,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb;AAAA,IACA,MAAM,WAAW,CAAE,CAAA;AAAA,EAAA,GACX;AArBV,SAAO,UAAkB;AACzB,SAAO,YAAoB;AAC3B,SAAO,gBAAwB;AAC/B,SAAO,SAAoB;AAE3B,SAAO,oBAA0B,CAAC;AAClC,SAAO,aAAa;AACpB,SAAO,cAAc;AAErB,SAAQ,UAAU;AAEV,SAAA,OAAiB,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,EAAE;AACxD,SAAA,oCAAsC,IAAI;AAUhD,SAAK,WAAW,CAAC;AACZ,SAAA,gCAAgB,KAAK;AAC1B,SAAK,aAAa,cAAc;AAChC,SAAK,aAAa,cAAc;AAChC,SAAK,aAAa,cAAc;AAChC,SAAK,aAAa,cAAc;AAChC,SAAK,YAAY,aAAa;AAC9B,SAAK,OAAO;AAAA,EAAA;AAAA,EAGd,IAAI,eAAe;;AACV,aAAA,UAAK,eAAe,EAAE,GAAG,GAAG,GAAG,KAAK,QAAQ,MAA5C,mBAA+C,WAAU;AAAA,EAAA;AAAA,EAGlE,gBAAgB,QAAgB,cAAc,MAAM;AAClD,WAAO,KAAK,OAAO;AAAA,MACjB,MAAM,EAAE,GAAG,EAAE,SAAS;AAAA,MACtB,SAAS;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EAAA;AAAA,EAGH,IAAI,cAAc;;AACT,aAAA,UAAK,eAAe,EAAE,GAAG,GAAG,GAAG,KAAK,QAAQ,MAA5C,mBAA+C,UAAS;AAAA,EAAA;AAAA,EAGjE,eAAe,OAAe,cAAc,MAAM;AAChD,WAAO,KAAK,OAAO;AAAA,MACjB,MAAM,EAAE,GAAG,EAAE,QAAQ;AAAA,MACrB,SAAS;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EAAA;AAAA,EAGH,IAAI,gBAAgB;AAClB,WAAO,KAAK,WAAW;AAAA,EAAA;AAAA,EAGzB,IAAI,YAAY;AACd,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAGnB,IAAI,UAAU;AACZ,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAGnB,IAAI,YAAY;AACd,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAGnB,IAAI,WAAW;AACb,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAGnB,IAAI,WAAW;AACb,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAGZ,kBAAkB;AAClB,SAAA,kBAAkB,QAAQ,CAAC,OAAO;;AACrC,YAAM,OAAO,KAAK,KAAK,KAAK,EAAE;AAC1B,YAAA,kCAAM,WAAN,mBAAc,YAAW,MAAM;AACjC;AAAA,MAAA;AAEG,WAAA,QAAQ,gBAAgB,6BAAM,OAAO;AAAA,QACxC,OAAO;AAAA,QACP,YAAY;AAAA,MAAA,CACb;AAAA,IAAA,CACF;AACD,SAAK,oBAAoB,CAAC;AAC1B,SAAK,SAAS;AAAA,EAAA;AAAA,EAGT,aAAa;AAClB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGP,oBAAoB,WAAmB;AAC5C,UAAM,UAAU,KAAK,KAAK,eAAe,SAAS;AAC3C,WAAA,KAAK,kBAAkB,OAAO;AAAA,EAAA;AAAA,EAEhC,kBAAkB,SAAiB;;AACxC,YAAO,sBAAK,KAAK,kBAAkB,OAAO,MAAnC,mBAAsC,UAAtC,mBAA6C,kBAA7C,mBAA4D;AAAA,EAAA;AAAA,EAG9D,WAAW,OAA2B;;AACvC,QAAA,KAAK,SAAS,GAAG;AACnB;AAAA,IAAA;AAEE,QAAA,MAAM,CAAC,KAAK,MAAM;AACpB,YAAM,CAAC,IAAI,EAAE,OAAO,cAAc,QAAQ,cAAc;AAAA,IAAA;AAEpD,UAAA,OAAO,qBAAqB,KAAK;AACjC,UAAA,gCAAgB,KAAK;AAC3B,SAAK,OAAO;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,IACd;AAGA,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,GAAG,KAAK;AACzC,YAAM,MAAW,CAAC;AACb,WAAA,SAAS,KAAK,GAAG;AACtB,eAAS,IAAI,GAAG,IAAI,KAAK,UAAU,GAAG,KAAK;AACnC,cAAA,KAAK,KAAK,WAAW;AAC3B,YAAI,KAAK,EAAE;AACX,cAAM,UAAU,IAAI,EAAE,GAAG,GAAG;AACvB,aAAA,cAAc,IAAI,IAAI,OAAO;AAAA,MAAA;AAAA,IACpC;AAEF,WAAO,KAAK,KAAK,EAAE,QAAQ,CAAC,YAAY;AAChC,YAAAH,SAAQ,YAAY,OAAO;AAC3B,YAAA,OAAO,MAAM,OAAO;AACpB,MAAAA,OAAA,QAAQ,CAAC8D,aAAY;AACnB,cAAA,SAAS,MAAMA,QAAO;AAC5B,cAAMA,QAAO,IAAI;AAAA,UACf,GAAG;AAAA,UACH,GAAG;AAAA,UACH,OAAO;AAAA,YACL,GAAG,iCAAQ;AAAA,YACX,GAAG,6BAAM;AAAA,UACX;AAAA,UACA,cAAa,iCAAQ,eAAc,OAAM,6BAAM,eAAc;AAAA,QAC/D;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAEK,UAAA,SAAS,+BAAQ;AACvB,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,GAAG,KAAK;AACnC,YAAA,QAAQ,IAAI,CAAC;AACb,YAAA,aAAa,+BAAQ;AAC3B,eAAS,IAAI,GAAG,IAAI,KAAK,UAAU,GAAG,KAAK;AACzC,cAAM,KAAK,KAAK,MAAM,EAAE,GAAG,GAAG;AAC9B,cAAM,UAAU,IAAI,EAAE,GAAG,GAAG;AACtB,cAAA,QAAQ,IAAI,CAAC;AACb,cAAA,aAAa,+BAAQ;AACrB,cAAA,OAAO,+BAAQ;AACrB,cAAM,UAAU;AAAA,UACd,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,OAAO;AAAA,YACL,GAAG,iCAAQ;AAAA,YACX,GAAG,yCAAY;AAAA,YACf,GAAG,yCAAY;AAAA,YACf,GAAG,6BAAM;AAAA,UACX;AAAA,UACA,cACG,iCAAQ,eAAc,OACtB,yCAAY,eAAc,OAC1B,yCAAY,eAAc,OAC1B,6BAAM,eAAc;AAAA,QACzB;AAEA,aAAI,8CAAS,UAAT,mBAAgB,eAAhB,4BAA6B,MAAM;AAChC,eAAA,kBAAkB,KAAK,EAAE;AAAA,QAAA;AAEhC,YAAI,MAAM,GAAG;AACP,cAAA,QAAQ,SAAS,MAAM;AACzB,oBAAQ,QAAQ;AAAA,UAAA;AAAA,QAClB,WACS,MAAM,GAAG;AACd,cAAA,QAAQ,UAAU,MAAM;AAC1B,oBAAQ,SAAS;AAAA,UAAA;AAAA,QACnB,OACK;AACL,iBAAO,QAAQ;AACf,iBAAO,QAAQ;AACf,iBAAO,QAAQ;AAAA,QAAA;AAET,gBAAA,SAAS,EAAE,IAAI,WAAW,gCAAgB,OAAO,SAAS,KAAK,QAAQ;AAC1E,aAAA,KAAK,KAAK,EAAE,IAAI;AAAA,MAAA;AAAA,IACvB;AAEF,SAAK,SAAS;AACd,SAAK,KAAK,eAAe,KAAK,SAAS,IAAI,KAAK;AAAA,EAAA;AAAA,EAG3C,mBAAmB;AACnB,SAAA;AACD,QAAA,KAAK,WAAW,OAAO,kBAAkB;AAC3C,WAAK,UAAU;AAAA,IAAA;AAAA,EACjB;AAAA,EAGM,aAAa;AACnB,YAAQ,KAAK,KAAK,YAAY,SAAS,EAAE;AAAA,EAAA;AAAA,EAGpC,YAAY,EAAE,KAAK,MAAM,QAAQ,SAAmB;;AAIzD,UAAM,IAAI,QAAQ;AAClB,UAAM,IAAI,OAAO;AAEX,UAAA,eAAe,KAAK,eAAe,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG,QAAQ;AAC/D,UAAA,cAAc,KAAK,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ;AAC1D,UAAA,gBAAgB,KAAK,eAAe,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,QAAQ;AACjE,UAAA,aAAa,KAAK,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ;AAEzD,UAAA,OAAK,kDAAc,WAAd,mBAAsB,eAAc;AACzC,UAAA,OAAK,gDAAa,WAAb,mBAAqB,eAAc;AACxC,UAAA,OAAK,oDAAe,WAAf,mBAAuB,cAAa;AACzC,UAAA,OAAK,8CAAY,WAAZ,mBAAoB,cAAa;AAE5C,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,EAAE;AACjC,UAAM,SAAS,KAAK,IAAI,GAAG,KAAK,EAAE;AAC3B,WAAA,EAAE,OAAO,OAAO;AAAA,EAAA;AAAA,EAGlB,eAAe;AACd,UAAA,UAAU,KAAK,WAAW;AAC1B,UAAA,UAAU,KAAK,WAAW;AAChC,UAAM,UAAU,KAAK;AACrB,UAAM,UAAU,KAAK;AAGrB,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,KAAK,SAAS,KAAK;AAC3B,YAAA,OAAO,KAAK,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AAChD,YAAA,KAAI,6BAAM,UAAS;AACzB,UAAI,6BAAM,QAAQ;AACX,aAAA,OAAO,aAAa,UAAU;AAAA,MAAA;AAE7B,cAAA;AAAA,IAAA;AAEV,SAAK,aAAa,UAAU;AAG5B,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,KAAK,SAAS,KAAK;AAC3B,YAAA,OAAO,KAAK,eAAe,EAAE,GAAG,GAAG,KAAK,QAAQ;AAChD,YAAA,KAAI,6BAAM,WAAU;AAC1B,UAAI,6BAAM,QAAQ;AACX,aAAA,OAAO,YAAY,UAAU;AAAA,MAAA;AAE5B,cAAA;AAAA,IAAA;AAEV,SAAK,cAAc,UAAU;AAAA,EAAA;AAAA,EAGxB,QAAQ,WAAW,OAAO,SAAS,OAAc;AACtD,SAAK,iBAAiB;AACtB,SAAK,gBAAgB,KAAK;AACrB,SAAA,gCAAgB,KAAK;AAE1B,SAAK,kBAAkB;AAEvB,QAAI,UAAU;AAEZ,WAAK,cAAc,MAAM;AAAA,IAAA;AAE3B,QAAI,QAAQ;AACV,WAAK,aAAa;AAAA,IAAA;AAEb,WAAA;AAAA,EAAA;AAAA,EAGF,MAAM,WAAW,OAAc;AAC9B,UAAA,SAAgB,OAAO,OAAO,OAAO,OAAO,OAAO,eAAe,IAAI,CAAC,GAAG,IAAI;AAC7E,WAAA,OAAO,QAAQ,QAAQ;AAAA,EAAA;AAAA,EAGzB,aACL,IACA,SAAS,GACT,SAAS,GAIT;AACM,UAAA,SAAS,GAAG,WAAW,GAAG;AAChC,QAAI,QAAQ;AACL,WAAA,GAAG,MAAM,CAAC;AACN,eAAA;AAAA,IAAA;AAEL,UAAA,SAAS,GAAG,SAAS,GAAG;AAC9B,QAAI,QAAQ;AACL,WAAA,GAAG,MAAM,GAAG,EAAE;AACV,eAAA;AAAA,IAAA;AAEX,UAAM,QAAQ,KAAK,cAAc,IAAI,EAAE;AACvC,QAAI,OAAO;AACH,YAAA,IAAI,IAAI,KAAK;AACZ,aAAA,EAAE,GAAG,EAAE,IAAI,QAAQ,GAAG,EAAE,IAAI,QAAQ,QAAQ,OAAO;AAAA,IAAA;AAG5D,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AACvC,YAAA,MAAM,KAAK,SAAS,CAAC;AAC3B,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAC7B,cAAA,WAAW,IAAI,CAAC;AACtB,cAAM,UAAU,IAAI,EAAE,GAAG,GAAG;AACvB,aAAA,cAAc,IAAI,UAAU,OAAO;AACxC,YAAI,aAAa,IAAI;AACZ,iBAAA;AAAA,YACL,GAAG,IAAI;AAAA,YACP,GAAG,IAAI;AAAA,YACP;AAAA,YACA;AAAA,UACF;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAEF,WAAO,EAAE,GAAG,IAAI,GAAG,IAAI,QAAQ,OAAO;AAAA,EAAA;AAAA,EAGjC,eAAe,IAAQ,SAAS,GAAG,SAAS,GAAuB;AAClE,UAAA,EAAE,GAAG,GAAG,QAAQ,OAAA,IAAW,KAAK,aAAa,IAAI,QAAQ,MAAM;AAC9D,WAAA,qBAAqB,IAAI,EAAE,GAAG,GAAG,GAAG,QAAQ,MAAM;AAAA,EAAA;AAAA,EAGpD,kBAAkB,KAAoB;AAC3C,UAAM,YAAgC,CAAC;AACvC,WAAO,KAAK,GAAG,EAAE,QAAQ,CAAC,OAAO;AACzB,YAAA,OAAO,IAAI,EAAE;AACb,YAAA,UAAU,KAAK,eAAe,EAAE;AACtC,UAAI,QAAQ,SAAS;AACnB,kBAAU,OAAO,IAAI;AAAA,MAAA;AAAA,IACvB,CACD;AACM,WAAA;AAAA,EAAA;AAAA,EAGF,qBAAqB;AAC1B,SAAK,cAAc,MAAM;AAAA,EAAA;AAAA,EAGpB,MAAM,OAAkB;;AACvB,UAAA,EAAE,GAAG,EAAA,IAAM;AACjB,YAAO,UAAK,SAAS,CAAC,MAAf,mBAAmB;AAAA,EAAC;AAAA,EAGtB,aAAa,OAAkE;AACpF,UAAM,EAAE,GAAG,GAAG,OAAO,OAAO,OAAO,UAAU;AAC7C,UAAM,KAAK,KAAK,MAAM,EAAE,GAAG,GAAG;AAC9B,QAAI,MAAM,MAAM;AACd,aAAO,EAAE,IAAI,MAAM,SAAS,KAAK;AAAA,IAAA;AAE5B,WAAA;AAAA,MACL;AAAA,MACA,SAAS,GAAG,OAAO,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,MAAM,EAAE;AAAA,IACrD;AAAA,EAAA;AAAA,EAGK,eAAe,OAAkB,gBAA+B,YAAY,QAAQ,OAAO;;AAC1F,UAAA,EAAE,GAAG,EAAA,IAAM;AACb,QAAA,MAAM,MAAM,MAAM,IAAI;AACjB,aAAA;AAAA,IAAA;AAET,UAAM,MAAK,UAAK,SAAS,CAAC,MAAf,mBAAmB;AAC9B,QAAI,MAAM,MAAM;AACP,aAAA;AAAA,IAAA;AAET,UAAM,OAAO,KAAK,KAAK,KAAK,EAAE;AAC9B,QAAI,QAAQ,MAAM;AACT,aAAA;AAAA,IAAA;AAET,UAAM,QAAQ,aAAa;AAAA,MACzB,OAAO,KAAK;AAAA,MACZ,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IAAA,CACT;AACM,WAAA,EAAE,GAAG,MAAM,MAAM;AAAA,EAAA;AAAA,EAGnB,iBAAiB,SAAkB,gBAA+B,YAAY,QAAQ,OAAO;AAC5F,UAAA,QAAQ,IAAI,OAAO;AACzB,WAAO,KAAK,eAAe,OAAO,eAAe,KAAK;AAAA,EAAA;AAAA,EAGjD,QAAQ,IAAQ;AACd,WAAA,KAAK,KAAK,KAAK,EAAE;AAAA,EAAA;AAAA,EAGnB,WAAW,OAAO,GAAG;AAC1B,UAAM,EAAE,KAAK,OAAO,IAAI,KAAK;AAC7B,WAAO,OAAO,SAAS;AAAA,EAAA;AAAA,EAGlB,WAAW,OAAO,GAAG;AAC1B,UAAM,EAAE,MAAM,MAAM,IAAI,KAAK;AAC7B,WAAO,OAAO,QAAQ;AAAA,EAAA;AAAA,EAGxB,IAAW,MAAM;AACf,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAEnB,IAAW,OAAO;AAChB,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAEnB,IAAW,SAAS;AAClB,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAEnB,IAAW,QAAQ;AACjB,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAGnB,WAAW,KAAc;AACvB,QAAI,KAAK,WAAW;AAClB,aAAO,IAAI,KAAK,SAAS,IAAI,GAAG;AAAA,IAAA;AAE3B,WAAA;AAAA,EAAA;AAAA,EAGF,eAAe;AAAA,IACpB;AAAA,IACA,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,IAA2B,IAAI;AAC7B,UAAM,EAAE,KAAK,MAAM,QAAQ,UAAU,QAAQ,KAAK;AAClD,UAAM,SAAS,aAAa,SAAS,MAAM,GAAG,QAAQ,OAAO,CAAC;AAC9D,aAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,eAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAC5B,cAAA,OAAO,KAAK,eAAe,EAAE,GAAG,KAAK,eAAe,KAAK,KAAK,CAAC;AACjE,YAAA,OAAO,IAAI,GAAG;AAChB,iBAAO,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,QAAA;AAAA,MACxC;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAAA,EAGF,eAAe;AAAA,IACpB;AAAA,IACA,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,IAA2B,IAAI;AAC7B,UAAM,SAAsC,CAAC;AAC7C,UAAM,EAAE,KAAK,MAAM,QAAQ,UAAU,QAAQ,KAAK;AAClD,aAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,eAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAC5B,cAAA,OAAO,KAAK,eAAe,EAAE,GAAG,KAAK,eAAe,KAAK,KAAK,CAAC;AACjE,YAAA,OAAO,IAAI,GAAG;AACT,iBAAA,IAAI,EAAE,GAAG,EAAA,CAAG,CAAC,IAAI,KAAK,KAAK;AAAA,QAAA;AAAA,MACpC;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAAA,EAGF,aAAa;AAAA,IAClB,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,IAAmB,IAAI;AACrB,UAAM,SAA+B,CAAC;AACtC,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAA,IAAU,KAAK;AAC1C,aAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,YAAM,MAA0B,CAAC;AACjC,aAAO,KAAK,GAAG;AACf,eAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAC5B,cAAA,OAAO,KAAK,eAAe,EAAE,GAAG,KAAK,eAAe,KAAK,KAAK,CAAC;AACjE,YAAA,OAAO,IAAI,GAAG;AAChB,cAAI,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;AAAA,QAAA;AAAA,MAC1B;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAAA,EAGF,aAAa;AAAA,IAClB,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,IAAmB,IAAI;AACrB,UAAM,SAA+B,CAAC;AACtC,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAA,IAAU,KAAK;AAC1C,aAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAClC,YAAM,MAA0B,CAAC;AACjC,aAAO,KAAK,GAAG;AACf,eAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAC5B,cAAA,OAAO,KAAK,eAAe,EAAE,GAAG,KAAK,eAAe,KAAK,KAAK,CAAC;AACjE,YAAA,OAAO,IAAI,GAAG;AAChB,cAAI,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;AAAA,QAAA;AAAA,MAC1B;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAAA,EAGF,UAAU;AAAA,IACf;AAAA,IACA,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,IAAsB,IAA2B;AAC/C,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAA,IAAU,QAAQ;AAAA,MAC3C,KAAK;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,KAAK,KAAK;AAAA,MAClB,OAAO,KAAK,KAAK;AAAA,IACnB;AACA,UAAM,SAAS,aAAa,SAAS,MAAM,GAAG,QAAQ,OAAO,CAAC;AAC9D,aAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,eAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAC5B,cAAA,OAAO,KAAK,eAAe,EAAE,GAAG,KAAK,eAAe,KAAK,KAAK,CAAC;AACjE,YAAA,OAAO,IAAI,GAAG;AAChB,iBAAO,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI;AAAA,QAAA;AAAA,MAC9B;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAAA,EAEF,UAAU,EAAE,gBAAgB,UAAU,MAAM,QAAQ,OAAO,SAAS,SAA+B,IAAA,IAAI;AAC5G,UAAM,SAA6B,CAAC;AACpC,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAA,IAAU,QAAQ;AAAA,MAC3C,KAAK;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,KAAK,KAAK;AAAA,MAClB,OAAO,KAAK,KAAK;AAAA,IACnB;AACA,aAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,eAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAC5B,cAAA,OAAO,KAAK,eAAe,EAAE,GAAG,KAAK,eAAe,KAAK,KAAK,CAAC;AACjE,YAAA,OAAO,IAAI,GAAG;AAChB,iBAAO,IAAI,EAAE,GAAG,EAAG,CAAA,CAAC,IAAI;AAAA,QAAA;AAAA,MAC1B;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAAA,EAEF,QAAQ,EAAE,gBAAgB,YAAY,QAAQ,OAAO,SAAS,SAAuB,IAAA,IAAI;AAC9F,UAAM,SAA+B,CAAC;AACtC,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAA,IAAU,KAAK;AAC1C,aAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,YAAM,MAA0B,CAAC;AACjC,aAAO,KAAK,GAAG;AACf,eAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAClC,cAAM,OAAO,KAAK,eAAe,EAAE,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,eAAe,KAAK,KAAK,CAAC;AACpF,YAAA,OAAO,IAAI,GAAG;AACZ,cAAA,IAAI,CAAC,CAAC,IAAI;AAAA,QAAA;AAAA,MAChB;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAAA,EAEF,QAAQ,EAAE,gBAAgB,YAAY,QAAQ,OAAO,SAAS,SAAuB,IAAA,IAAI;AAC9F,UAAM,SAA+B,CAAC;AACtC,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAA,IAAU,KAAK;AAC1C,aAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAClC,YAAM,MAA0B,CAAC;AACjC,aAAO,KAAK,GAAG;AACf,eAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,cAAM,OAAO,KAAK,eAAe,EAAE,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,eAAe,KAAK,KAAK,CAAC;AACpF,YAAA,OAAO,IAAI,GAAG;AACZ,cAAA,IAAI,CAAC,CAAC,IAAI;AAAA,QAAA;AAAA,MAChB;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAAA,EAGD,YAAY,SAAsB;AACxC,UAAM,MAAM,KAAK;AACX,UAAA,mBAAmB,IAAI,UAAU,OAAO,IAAI,eAAe,GAAG,IAAI,UAAU,MAAM;AACxF,qBAAiB,QAAQ,KAAK,aAAa,KAAK,IAAI,CAAC;AACjD,QAAA,UAAU,KAAK,OAAO;AACtB,QAAA,cAAc,IAAI,iBAAiB;AACvC,QAAI,IAAI,UAAU,SAAS,IAAI,cAAc;AAC3C,YAAM,YAAY,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE,CAAC;AAC9C,WAAK,cAAc,SAAS;AAAA,IAAA,OACvB;AACD,UAAA;AAAA,IAAA;AAAA,EACN;AAAA,EAGM,cAAc,SAAsB;AAC1C,QAAI,QAAQ,cAAc,iBAAiB,QAAQ,cAAc,eAAe;AACtE,cAAA,QAAQ,QAAQ,CAAC,QAAQ;AAC3B,YAAA,QAAQ,CAAC,OAAO;AACX,iBAAA,KAAK,KAAK,KAAK,EAAE;AAAA,QAAA,CACzB;AAAA,MAAA,CACF;AAAA,IAAA;AAEC,QAAA,QAAQ,cAAc,QAAQ;AAChC,aAAO,KAAK,QAAQ,QAAQ,EAAE,QAAQ,CAAC,YAAY;AAC3C,cAAA,WAAW,QAAQ,SAAS,OAAO;AAChC,iBAAA;AAAA,UAAI,CAAC,QACZ,IAAI,QAAQ,CAAC,OAAO;AAClB,gBAAI,MAAM,MAAM;AACP,qBAAA,KAAK,KAAK,KAAK,EAAE;AAAA,YAAA;AAAA,UAE3B,CAAA;AAAA,QACH;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EACH;AAAA,EAGM,aAAa,SAAsB;AACzC,QAAI,QAAQ,cAAc,iBAAiB,QAAQ,cAAc,eAAe;AACtE,cAAA,SAAS,QAAQ,CAAC,QAAQ;AAC5B,YAAA,QAAQ,CAAC,OAAO;AACX,iBAAA,KAAK,KAAK,KAAK,EAAE;AAAA,QAAA,CACzB;AAAA,MAAA,CACF;AAAA,IAAA;AAAA,EACH;AAAA,EAGM,eAAe,MAAgB;AACrC,UAAM,SAAmB,CAAC;AAC1B,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAU,IAAA;AACrC,aAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,YAAM,MAAW,CAAC;AAClB,aAAO,KAAK,GAAG;AACf,eAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAC9B,YAAA,KAAK,KAAK,YAAY;AAAA,MAAA;AAAA,IAC5B;AAEK,WAAA;AAAA,EAAA;AAAA,EAGD,oBAAoB,MAAgB;;AAC1C,UAAM,SAAmB,CAAC;AAC1B,UAAM,EAAE,KAAK,MAAM,QAAQ,MAAU,IAAA;AACrC,aAAS,IAAI,KAAK,KAAK,QAAQ,KAAK;AAClC,YAAM,MAAW,CAAC;AAClB,aAAO,KAAK,GAAG;AACf,eAAS,IAAI,MAAM,KAAK,OAAO,KAAK;AAClC,cAAM,MAAK,UAAK,SAAS,CAAC,MAAf,mBAAmB;AAC9B,YAAI,MAAM,MAAM;AACd;AAAA,QAAA;AAEF,YAAI,KAAK,EAAE;AAAA,MAAA;AAAA,IACb;AAEK,WAAA;AAAA,EAAA;AAAA,EAGD,aAAa,MAAiB,WAAkB;AAClD,SAAA,6BAAM,WAAU,MAAM;AACjB,aAAA;AAAA,IAAA;AAET,SAAK,OAAQ,YAAY,aAAa,oBAAI,KAAK;AACxC,WAAA;AAAA,EAAA;AAAA,EAGD,eAAe,MAAoC;AACzD,QAAI,OAAO;AACX,QAAI,OAAO;AACX,QAAI,OAAO;AACX,QAAI,OAAO;AAEX,WAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,YAAY;AAC/B,YAAA,QAAQ,IAAI,OAAO;AACzB,aAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,aAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,aAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,aAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAAA,IAAA,CAC9B;AAEM,WAAA;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EAAA;AAAA,EAGM,eAAe,MAA4B;AACjD,QAAI,QAAQ,MAAM;AACT,aAAA;AAAA,IAAA;AAET,UAAM,UAAoB,CAAC;AACvB,QAAA,KAAK,SAAS,MAAM;AACtB,cAAQ,QAAQ,KAAK;AAAA,IAAA;AAEnB,QAAA,KAAK,kBAAkB,MAAM;AAC/B,cAAQ,iBAAiB,KAAK;AAAA,IAAA;AAE5B,QAAA,KAAK,cAAc,MAAM;AAC3B,cAAQ,aAAa,KAAK;AAAA,IAAA;AAExB,QAAA,KAAK,YAAY,MAAM;AACzB,cAAQ,WAAW,KAAK;AAAA,IAAA;AAEtB,QAAA,KAAK,UAAU,MAAM;AACvB,cAAQ,SAAS,KAAK;AAAA,IAAA;AAEpB,QAAA,KAAK,SAAS,MAAM;AACtB,cAAQ,QAAQ,KAAK;AAAA,IAAA;AAEnB,QAAA,KAAK,UAAU,MAAM;AACvB,cAAQ,SAAS,KAAK;AAAA,IAAA;AAEpB,QAAA,KAAK,WAAW,MAAM;AACxB,cAAQ,UAAU,KAAK;AAAA,IAAA;AAElB,WAAA;AAAA,EAAA;AAAA,EAGF,KAAK;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EAAA,GACY;AACN,UAAA,YAAY,KAAK,eAAe,GAAG;AACzC,UAAM,aAAa,SAAS,QAAQ,oBAAoB,GAAG;AACrD,UAAA,WAAW,KAAK,oBAAoB,GAAG;AAE7C,UAAM,aAA4B,CAAC;AAC7B,UAAA,YAAY,IAAI,mBAAmB,IAAI;AAG7C,UAAM,WAAW,UAAU,KAAK,UAAU,YAAY,KAAK,CAAC,EAAE,UAAU,OAAO,UAAU,MAAA,MAAY;;AAC/F,UAAA,SAAS,QAAQ,SAAS,MAAM;AAC3B,eAAA;AAAA,MAAA;AAEC,gBAAA,IAAI,KAAK,IAAI;AACb,gBAAA,iBAAiB,OAAO,KAAK;AAEvC,YAAM,UAAU,KAAK,KAAK,KAAK,KAAK;AACpC,YAAM,UAAU,KAAK,KAAK,KAAK,KAAK;AACpC,UACE,aAAa,WACZC,aAAuB,mCAAS,YAAYC,QAAkB,KAC7DD,aAAuB,mCAAS,YAAYE,MAAgB,IAC9D;AACO,eAAA;AAAA,MAAA;AAET,YAAM,SAAS,KAAK,SAAS,mCAAS,MAAO,KAAK;AAC5C,YAAA,QAAQ,OAAO,SAAS;AAAA,QAC5B,OAAO;AAAA,QACP,OAAO,KAAK,aAAa,KAAK;AAAA,QAC9B,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAWA;AAAAA,MAAU,CACtB;AACD,UAAI,OAAO;AACT,mBAAW,KAAK,IAAI,EAAE,GAAG,QAAQ;AAC5B,aAAA,KAAK,KAAK,KAAK,IAAI;AAAA,UACtB,GAAG;AAAA,UACH,GAAG;AAAA,UACH,QAAQ;AAAA,YACN,IAAI;AAAA,YACJ,SAAS,KAAK;AAAA,YACd,+BAAe,KAAK;AAAA,YACpB,cAAY,wCAAS,WAAT,mBAAiB,mCAAkB,IAAI;AAAA,UAAA;AAAA,QAEvD;AAAA,MAAA;AAEF,UAAI,WAAW,MAAM;AACnB,aAAK,aAAa,SAAa,oBAAA,KAAA,CAAM;AAAA,MAAA;AAEhC,aAAA;AAAA,IAAA,CACR;AAED,UAAM,cAAc,SAAS;AAC7B,UAAM,aAAa,KAAK,KAAK,kBAAkB,YAAY,OAAO;AAElE,cAAU,YAAY,UAAU,WAAW,KAAK,CAAC,EAAE,UAAU,OAAO,UAAU,OAAO,UAAU,SAAA,MAAe;;AAE5G,UAAI,MAAM,KAAK,QAAQ,KAAK,aAAa,MAAM;AACtC,eAAA;AAAA,MAAA;AAEC,gBAAA,IAAI,KAAK,IAAI;AACvB,YAAM,UAAU,YAAY,KAAK,KAAK,KAAK;AACvC,UAAA,aAAa,UAAUF,aAAuB,mCAAS,YAAYC,QAAkB,GAAG;AACnF,eAAA;AAAA,MAAA;AAET,YAAM,SAAS,KAAK,SAAS,mCAAS,MAAO,KAAK;AAC5C,YAAA,QAAQ,OAAO,SAAS;AAAA,QAC5B,OAAO;AAAA,QACP,OAAO,YAAY,aAAa,KAAK;AAAA,QACrC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAWA;AAAAA,MAAU,CACtB;AACW,kBAAA,KAAK,KAAK,KAAK,IAAI;AAAA,QAC7B,OAAO;AAAA,QACP,GAAG;AAAA,QACH,QAAQ;AAAA,UACN,IAAI;AAAA,UACJ,SAAS,YAAY;AAAA,UACrB,+BAAe,KAAK;AAAA,UACpB,cAAY,wCAAS,WAAT,mBAAiB,mCAAkB,IAAI;AAAA,QAAA;AAAA,MAEvD;AACO,aAAA;AAAA,IAAA,CACR;AAEK,UAAA,eAAe,UAAU,kBAAkB;AAC1C,WAAA,OAAO,YAAY,YAAY;AAClC,QAAA,aAAa,QAAQ,eAAe,MAAM;AACtC,YAAA,EAAE,aAAa;AACrB,4BAAsB,MAAM;AACjB,iBAAA,YAAY,WAAW,CAAC;AAAA,MAAA,CAClC;AAAA,IAAA;AAGH,QAAI,aAAa;AACf,WAAK,YAAY;AAAA,QACf,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY,YAAY;AAAA,QACxB,YAAY,KAAK;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,CAAC;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA;AAIC,QAAA,KAAK,KAAK,QAAQ;AAEf,WAAA,KAAK,OAAO,EAAE,OAAO,SAAS,QAAQ,KAAK,GAAG,GAAG;AACjD,WAAA,KAAK,OAAO,EAAE,OAAO,KAAK,QAAQ,KAAK,GAAG,GAAG;AAAA,IAAA;AAG7C,WAAA,KAAK,QAAQ,IAAI;AAAA,EAAA;AAAA,EAGnB,KAAK;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EAAA,GACsC;AACtC,UAAM,WAAW,aAAa;AAC9B,UAAM,EAAE,QAAQ,WAAW,OAAO,SAAS,IAAI,UAAU,EAAE,GAAG,KAAK,MAAM,EAAA,CAAG;AAC5E,UAAM,EAAE,KAAK,SAAS,MAAM,SAAa,IAAA;AACnC,UAAA,EAAE,KAAK,OAAO,MAAM,QAAQ,QAAQ,UAAU,OAAO,QAAA,IAAY;AACvE,UAAM,OAA2B,CAAC;AAC5B,UAAA,gCAAgB,KAAK;AAE3B,aAAS,IAAI,GAAG,KAAK,WAAW,OAAO,KAAK;AAC1C,YAAM,MAAM,QAAQ;AAChB,UAAA,MAAM,KAAK,cAAc;AAC3B;AAAA,MAAA;AAEF,eAAS,IAAI,GAAG,KAAK,UAAU,QAAQ,KAAK;AAC1C,cAAM,MAAM,SAAS;AACjB,YAAA,MAAM,KAAK,cAAc;AAC3B;AAAA,QAAA;AAEI,cAAA,QAAQ,UAAW,IAAI;AACvB,cAAA,QAAQ,WAAY,IAAI;AACxB,cAAA,SAAS,WAAW,IAAI,MAAM;AAC9B,cAAA,SAAS,WAAW,IAAI,MAAM;AACpC,cAAM,OAAiB;AAAA,UACrB,GAAG,SAAS;AAAA,YACV;AAAA,cACE,GAAG,UAAW,IAAI;AAAA,cAClB,GAAG,WAAY,IAAI;AAAA,YACrB;AAAA,YACA;AAAA,UAAA;AAAA,QAEJ;AACA,cAAM,WAAW,EAAE,GAAG,KAAK,GAAG,IAAI;AAC5B,cAAA,QAAQ,gBAAgB,6BAAM,OAAO;AAAA,UACzC,OAAO;AAAA,UACP,YAAY,KAAK,MAAM,QAAQ;AAAA,UAC/B;AAAA,UACA;AAAA,QAAA,CACD;AACI,aAAA,aAAa,MAAM,SAAS;AAC3B,cAAA,UAAU,IAAI,QAAQ;AAC5B,YAAI,WAAW;AACb,gBAAM,UAAU,KAAK,eAAe,UAAU,QAAQ;AACtD,eAAK,QAAQ,mCAAS;AACtB,eAAK,iBAAiB,mCAAS;AAC/B,eAAK,aAAa,mCAAS;AAAA,QAAA;AAE7B,aAAK,OAAO,IAAI,EAAE,GAAG,MAAM,MAAM;AAAA,MAAA;AAAA,IACnC;AAEF,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA,WAAWE;AAAAA,MACX;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAAA,EAGI,iBAAiB,OAA8B;AACpD,UAAM,OAAO,KAAK,eAAe,OAAO,QAAQ;AAC5C,SAAA,6BAAM,WAAU,MAAM;AACjB,aAAA;AAAA,IAAA;AAET,WAAO,KAAK,SAAS,KAAK,MAAM,KAAK;AAAA,EAAA;AAAA,EAG/B,QAAQ;AAAA,IACd;AAAA,IACA,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,eAAe,CAAC,SAAS;AAAA,IACzB,WAAW;AAAA,IACX,WAAW,KAAKC;AAAAA,IAChB,kBAAkB;AAAA,EAAA,GASjB;AACD,UAAM,aAA4B,CAAC;AACnC,UAAM,YAA2B,CAAC;AAC5B,UAAA,gCAAgB,KAAK;AAE3B,QAAI,UAAU;AACd,WAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,YAAY;;AAC/B,YAAA,QAAQ,IAAI,OAAO;AACnB,YAAA,KAAK,KAAK,MAAM,KAAK;AAC3B,YAAM,WAAW,KAAK,KAAK,KAAK,EAAE;AAC9B,UAAA,aAAa,UAAUJ,aAAuB,SAAS,YAAYI,MAAgB,GAAG;AACxF;AAAA,MAAA;AAGF,UAAI,QAA6B,EAAE,GAAG,KAAK,OAAO,EAAE;AAEpD,UAAI,iBAAiB;AACb,cAAA,QAAQ,gBAAgB,MAAM,OAAO;AAAA,UACzC,OAAO;AAAA,UACP,YAAY;AAAA,QAAA,CACb;AAAA,MAAA;AAEU,mBAAA,QAAQ,CAAC,QAAQ;AACtB,cAAA,GAAG,IAAI,qCAAW;AAAA,MAAG,CAC5B;AACG,UAAA,aAAa,UAAUJ,aAAuB,qCAAU,YAAYK,KAAe,GAAG;AACxF,eAAO,MAAM;AAAA,MAAA;AAEX,UAAA,aAAa,UAAUL,aAAuB,qCAAU,YAAYM,KAAe,GAAG;AACxF,cAAO,+BAAO,UAAd,wBAAqB;AACrB,cAAO,+BAAO,UAAd,wBAAqB;AAAA,MAAA;AAEnB,UAAA,aAAa,UAAUN,aAAuB,qCAAU,YAAYO,MAAgB,GAAG;AACzF,cAAO,+BAAO,UAAd,wBAAqB;AACrB,cAAO,+BAAO,UAAd,wBAAqB;AAAA,MAAA;AAEnB,UAAA,aAAa,UAAUP,aAAuB,qCAAU,YAAYQ,WAAqB,GAAG;AAC9F,4CAAc;AAAA,MAAA;AAEZ,UAAA,aAAa,UAAUR,aAAuB,qCAAU,YAAYS,SAAmB,GAAG;AAC5F,4CAAc;AAAA,MAAA;AAEhB,UAAI,iBAAiB;AACd,aAAA,aAAa,OAAO,SAAS;AAAA,MAAA;AAEpC,UAAI,MAAM,SAAS,QAAQ,MAAM,UAAU,MAAM;AACrC,kBAAA;AAAA,MAAA;AAGZ,iBAAW,EAAE,IAAI,EAAE,GAAG,SAAS;AAE/B,YAAM,SAAS,KAAK,SAAS,SAAS,MAAO,KAAK;AAC5C,YAAA,IAAI,OAAO,SAAS;AAAA,QACxB,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MAAA,CACZ;AACO,cAAA,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,SAAS,QAAS,YAAY;AAC3D,UAAI,SAAS;AACD,kBAAA,EAAE,IAAI,KAAK,KAAK,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,GAAG,MAAM;AAAA,MAAA,OACxD;AACL,kBAAU,EAAE,IAAI,KAAK,KAAK,KAAK,EAAE,IAAI;AAAA,MAAA;AAAA,IACvC,CACD;AAGG,QAAA,KAAK,KAAK,UAAU,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG;AAC9C,YAAA,cAAc,KAAK,eAAe,IAAI;AACvC,WAAA,KAAK,OAAO,EAAE,OAAO,KAAK,QAAQ,KAAK,WAAW,GAAG;AAAA,IAAA;AAIrD,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAAA,EAGK,OAAO;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,WAAW,KAAKL;AAAAA,IAChB;AAAA,IACA;AAAA,EAAA,GAUC;AACD,UAAM,EAAE,YAAY,WAAW,QAAQ,IAAI,KAAK,QAAQ;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX;AAAA,IAAA,CACD;AAED,QAAI,aAAa;AACf,WAAK,YAAY;AAAA,QACf,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY,KAAK;AAAA,QACjB,YAAY,KAAK;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA;AAEI,WAAA,KAAK,QAAQ,OAAO,OAAO;AAAA,EAAA;AAAA,EAG7B,mBAAmB;AAAA,IACxB;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EAAA,GAUC;AACD,UAAM,EAAE,GAAG,OAAO,GAAG,MAAU,IAAA;AAC/B,UAAM,OAA2B,CAAC;AAC3B,WAAA,QAAQ,CAAC,OAAO,MAAM;AAC3B,YAAM,IAAI,QAAQ;AACd,UAAA,IAAI,KAAK,QAAQ;AACnB;AAAA,MAAA;AAEI,YAAA,QAAQ,CAAC,SAAS,MAAM;AAC5B,cAAM,IAAI,QAAQ;AACd,YAAA,IAAI,KAAK,OAAO;AAClB;AAAA,QAAA;AAGIM,cAAAA,SAAQ,EAAE,GAAG,EAAE;AACrB,cAAM,SAAS,KAAK,MAAMA,QAAO,QAAQ,SAAS,EAAE;AACpD,eAAO,QAAQ,EAAE,GAAG,QAAQ,OAAO,GAAG,OAAO,MAAM;AACnD,YAAI,WAAW;AACb,gBAAM,cAAc,KAAK,eAAeA,QAAO,QAAQ;AACvD,iBAAO,QAAQ,2CAAa;AAC5B,iBAAO,iBAAiB,2CAAa;AACrC,iBAAO,aAAa,2CAAa;AAAA,QAAA;AAE9B,aAAA,IAAIA,MAAK,CAAC,IAAI;AAAA,MAAA,CACpB;AAAA,IAAA,CACF;AACD,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAWL;AAAAA,MACX;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAAA,EAGI,YAAY,OAQhB;AACD,UAAM,kBAA2C,MAAM,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,MAAA,EAAQ,CAAC;AAC1G,WAAO,KAAK,mBAAmB,EAAE,GAAG,OAAO,QAAQ,iBAAiB;AAAA,EAAA;AAAA,EAG/D,MAAM,OAQV;AACK,UAAA,EAAE,OAAO,MAAA,IAAU;AACzB,UAAM,SAAS,KAAK,MAAM,OAAO,SAAS,EAAE;AAC5C,UAAM,UAAU,KAAK,eAAe,OAAO,KAAK;AAC5C,SAAA,mCAAS,WAAU,OAAO,OAAO;AAE5B,aAAA;AAAA,IAAA;AAET,UAAM,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO;AACpC,WAAO,KAAK,OAAO;AAAA,MACjB,GAAG;AAAA,MACH;AAAA,MACA,SAAS;AAAA,MACT,WAAWA;AAAAA,IAAU,CACtB;AAAA,EAAA;AAAA,EAGI,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EAAA,GAWC;AACG,QAAA,KAAK,eAAe,MAAM,KAAK,eAAe,UAAU,KAAK,YAAY;AAC3E,cAAQ,MAAM,uBAAuB,KAAK,UAAU,GAAG;AAChD,aAAA;AAAA,IAAA;AAEH,UAAA,UAAU,KAAK,WAAW,CAAC;AACjC,UAAM,OAAiB,CAAC;AAClB,UAAA,gCAAgB,KAAK;AAC3B,aAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,YAAM,MAAW,CAAC;AAClB,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAC1B,cAAA,KAAK,KAAK,WAAW;AAC3B,YAAI,KAAK,EAAE;AACL,cAAA,OAAO,KAAK,eAAe,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,QAAQ;AACvD,cAAA,SAAS,KAAK,eAAe,IAAI;AAClC,aAAA,KAAK,KAAK,EAAE,IAAI;AAAA,UACnB,GAAG;AAAA,UACH,QAAQ;AAAA,YACN;AAAA,YACA,SAAS,KAAK;AAAA,YACd;AAAA,YACA,gCAAgB,IAAI;AAAA,UAAA;AAAA,QAExB;AAAA,MAAA;AAEF,WAAK,KAAK,GAAG;AAAA,IAAA;AAEf,SAAK,SAAS,OAAO,GAAG,GAAG,GAAG,IAAI;AAClC,SAAK,KAAK,UAAU;AAEpB,SAAK,YAAY;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IAAA,CACX;AAGD,QAAI,MAAM;AACR,aAAO,OAAO,KAAK,KAAK,aAAc,KAAK,QAAQ,EAAE,MAAM,SAAS,iBAAiB,SAAU,CAAA,GAAG,EAAE,SAAS;AAAA,IAAA;AAE3G,QAAA,KAAK,KAAK,cAAc;AACpB,YAAA,SAAS,KAAK,MAAM;AAC1B,aAAO,OAAO;AAAA,QACZ,KAAK;AAAA,QACL,QAAQ,IAAI,UAAU;AAAA,QACtB,MAAM,KAAK,KAAK;AAAA,QAChB,OAAO,KAAK,KAAK;AAAA,MACnB;AACO,aAAA,oCAAoB,IAAI;AAC/B,WAAK,KAAK,aAAa,EAAE,OAAO,QAAQ,GAAG,SAAS;AAAA,IAAA;AAE/C,WAAA,KAAK,QAAQ,MAAM,IAAI;AAAA,EAAA;AAAA,EAEzB,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EAAA,GAOC;AACG,QAAA,KAAK,eAAe,MAAM,KAAK,eAAe,UAAU,KAAK,YAAY;AAC3E,cAAQ,MAAM,YAAY,KAAK,UAAU,uBAAuB;AACzD,aAAA;AAAA,IAAA;AAGH,UAAA,YAAY,IAAI,mBAAmB,IAAI;AAC7C,UAAM,KAAe,CAAC;AAChB,UAAA,SAAS,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;AAElD,aAAS,KAAK,GAAG,KAAK,IAAI,SAAS,MAAM;AACjC,YAAA,OAAO,KAAK,eAAe,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,QAAQ;AACtD,UAAA,aAAa,UAAUL,aAAuB,6BAAM,YAAYW,UAAoB,GAAG;AACjF,gBAAA,KAAK,qBAAqB,EAAE,GAAG;AAChC,eAAA;AAAA,MAAA;AAET,eAAS,KAAK,GAAG,MAAM,KAAK,WAAA,GAAc,MAAM;AACxC,cAAA,KAAK,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI;AACtC,YAAI,MAAM,MAAM;AACd;AAAA,QAAA;AAEF,kBAAU,iBAAiB,EAAE;AACnB,kBAAA,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,GAAG,KAAK,SAAS,GAAG,GAAA,CAAI;AAAA,MAAA;AAE3D,SAAG,QAAQ,EAAE;AAAA,IAAA;AAEf,UAAM,UAAsB,CAAC;AAC1B,OAAA,QAAQ,CAACvD,OAAM;AAChB,YAAM,MAAM,KAAK,SAAS,OAAOA,IAAG,CAAC;AAC7B,cAAA,QAAQ,IAAI,CAAC,CAAC;AAAA,IAAA,CACvB;AACI,SAAA,KAAK,UAAU,GAAG;AAEjB,UAAA,aAAa,UAAU,kBAAkB,YAAY;AAE3D,SAAK,YAAY;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,MACA,IAAI,GAAG,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,IAAA,CACD;AAEG,QAAA,KAAK,KAAK,cAAc;AACpB,YAAA,SAAS,KAAK,MAAM;AAC1B,aAAO,WAAW;AAClB,aAAO,OAAO;AAAA,QACZ,KAAK;AAAA,QACL,QAAQ,IAAI,UAAU;AAAA,QACtB,MAAM,KAAK,KAAK;AAAA,QAChB,OAAO,KAAK,KAAK;AAAA,MACnB;AACO,aAAA,oCAAoB,IAAI;AAC1B,WAAA,KAAK,aAAa,EAAE,OAAO,QAAQ,IAAI,GAAG,QAAQ,GAAG;AAAA,IAAA;AAErD,WAAA,KAAK,QAAQ,MAAM,IAAI;AAAA,EAAA;AAAA,EAGzB,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EAAA,GAWC;AACG,QAAA,KAAK,eAAe,MAAM,KAAK,eAAe,UAAU,KAAK,YAAY;AAC3E,cAAQ,MAAM,0BAA0B,KAAK,UAAU,GAAG;AACnD,aAAA;AAAA,IAAA;AAEH,UAAA,UAAU,KAAK,WAAW,CAAC;AACjC,UAAM,OAAiB,CAAC;AAClB,UAAA,gCAAgB,KAAK;AAC3B,aAAS,IAAI,GAAG,KAAK,SAAS,KAAK;AACjC,YAAM,MAAW,CAAC;AAClB,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAC1B,cAAA,KAAK,KAAK,WAAW;AAC3B,YAAI,KAAK,EAAE;AACL,cAAA,OAAO,KAAK,eAAe,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG,QAAQ;AACvD,cAAA,SAAS,KAAK,eAAe,IAAI;AACvC,aAAK,SAAS,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE;AAC3B,aAAA,KAAK,KAAK,EAAE,IAAI;AAAA,UACnB,GAAG;AAAA,UACH,QAAQ;AAAA,YACN;AAAA,YACA,SAAS,KAAK;AAAA,YACd;AAAA,YACA,gCAAgB,IAAI;AAAA,UAAA;AAAA,QAExB;AAAA,MAAA;AAEF,WAAK,KAAK,GAAG;AAAA,IAAA;AAEf,SAAK,KAAK,SAAS;AAEnB,SAAK,YAAY;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IAAA,CACX;AAGD,QAAI,MAAM;AACR,aAAO,OAAO,KAAK,KAAK,aAAc,KAAK,QAAQ,EAAE,MAAM,SAAS,iBAAiB,SAAU,CAAA,GAAG,EAAE,SAAS;AAAA,IAAA;AAE3G,QAAA,KAAK,KAAK,cAAc;AACpB,YAAA,SAAS,KAAK,MAAM;AAC1B,aAAO,OAAO;AAAA,QACZ,KAAK,KAAK,KAAK;AAAA,QACf,QAAQ,KAAK,KAAK;AAAA,QAClB,MAAM;AAAA,QACN,OAAO,IAAI,UAAU;AAAA,MACvB;AACO,aAAA,oCAAoB,IAAI;AAC/B,WAAK,KAAK,aAAa,EAAE,OAAO,QAAQ,GAAG,SAAS;AAAA,IAAA;AAE/C,WAAA,KAAK,QAAQ,MAAM,IAAI;AAAA,EAAA;AAAA,EAEzB,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EAAA,GAOC;AACG,QAAA,KAAK,eAAe,MAAM,KAAK,eAAe,UAAU,KAAK,YAAY;AAC3E,cAAQ,MAAM,YAAY,KAAK,UAAU,0BAA0B;AAC5D,aAAA;AAAA,IAAA;AAGH,UAAA,YAAY,IAAI,mBAAmB,IAAI;AAC7C,UAAM,KAAe,CAAC;AAChB,UAAA,SAAS,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;AAElD,aAAS,KAAK,GAAG,KAAK,IAAI,SAAS,MAAM;AACjC,YAAA,OAAO,KAAK,eAAe,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ;AACtD,UAAA,aAAa,UAAU4C,aAAuB,6BAAM,YAAYY,UAAoB,GAAG;AACjF,gBAAA,KAAK,qBAAqB,EAAE,GAAG;AACvC;AAAA,MAAA;AAEF,eAAS,KAAK,GAAG,MAAM,KAAK,WAAA,GAAc,MAAM;AACxC,cAAA,KAAK,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI;AACtC,YAAI,MAAM,MAAM;AACd;AAAA,QAAA;AAEF,kBAAU,iBAAiB,EAAE;AACnB,kBAAA,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,KAAK,QAAA,CAAS;AAAA,MAAA;AAE3D,SAAG,QAAQ,EAAE;AAAA,IAAA;AAGf,UAAM,UAAsB,CAAC;AACxB,SAAA,SAAS,QAAQ,CAAC,QAAQ;AAC7B,YAAM,WAAgB,CAAC;AACvB,cAAQ,KAAK,QAAQ;AAElB,SAAA,QAAQ,CAAC3B,OAAM;AAChB,iBAAS,QAAQ,GAAG,IAAI,OAAOA,IAAG,CAAC,CAAC;AAAA,MAAA,CACrC;AAAA,IAAA,CACF;AACI,SAAA,KAAK,SAAS,GAAG;AAChB,UAAA,aAAa,UAAU,kBAAkB,YAAY;AAE3D,SAAK,YAAY;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,MACA,IAAI,GAAG,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,IAAA,CACD;AAEG,QAAA,KAAK,KAAK,cAAc;AACpB,YAAA,SAAS,KAAK,MAAM;AAC1B,aAAO,WAAW;AAClB,aAAO,OAAO;AAAA,QACZ,KAAK,KAAK,KAAK;AAAA,QACf,QAAQ,KAAK,KAAK;AAAA,QAClB,MAAM;AAAA,QACN,OAAO,IAAI,UAAU;AAAA,MACvB;AACO,aAAA,oCAAoB,IAAI;AAC1B,WAAA,KAAK,aAAa,EAAE,OAAO,QAAQ,IAAI,GAAG,QAAQ,GAAG;AAAA,IAAA;AAErD,WAAA,KAAK,QAAQ,MAAM,IAAI;AAAA,EAAA;AAAA,EAEzB,eAAe;AACpB,WAAO,CAAC,GAAG,KAAK,KAAK,SAAS;AAAA,EAAA;AAAA,EAEzB,kBAAkB;AACvB,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAEZ,iBAAiB;AACf,WAAA,KAAK,KAAK,UAAU;AAAA,EAAA;AAAA,EAEtB,kBAAkB;AACvB,WAAO,KAAK,KAAK;AAAA,EAAA;AAAA,EAGZ,UAAoB;AAClB,WAAA,EAAE,GAAG,KAAK,KAAK;AAAA,EAAA;AAAA,EAGjB,MAAM,OAAkB,OAAe;AAC5C,UAAM,OAAO,KAAK,eAAe,OAAO,QAAQ,KAAK,CAAC;AACtD,UAAM,SAAS,KAAK,QAAQ,KAAK,UAAU,EAAE,KAAK;AAC3C,WAAA,OAAO,KAAK,OAAO,IAAI;AAAA,EAAA;AAAA,EAGzB,OAAO,OAA0B;AAChC,UAAA,EAAE,OAAO,KAAA,IAAS;AACxB,UAAM,OAAO,KAAK,eAAe,OAAO,QAAQ,KAAK,CAAC;AACtD,UAAM,WAAW,KAAK,UAAU,KAAK,YAAY,EAAE,KAAK;AACxD,WAAO,SAAS,KAAK,EAAE,OAAO,MAAM,OAAO,MAAM;AAAA,EAAA;AAAA,EAG5C,UAAU;AAAA,IACf;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,EAAA,GAKf;AACD,QAAI,QAAQ,MAAM;AAChB,aAAO,KAAK,eAAe,OAAO,eAAe,IAAI;AAAA,IAAA;AAEvD,QAAI,QAAQ,MAAM;AACT,aAAA;AAAA,IAAA;AAET,UAAM,WAAW,KAAK,WAAU,6BAAM,aAAY,EAAE,KAAK;AACnD,UAAA,IAAI,SAAS,UAAU,EAAE,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,MAAA,CAAO;AAExE,QAAA,EAAE,CAAC,MAAM,KAAK;AAChB,UAAI,kBAAkB,UAAU;AACvB,eAAA;AAAA,MAAA;AAET,UAAI,kBAAkB,OAAO;AAC3B,cAAM,QAAQ,IAAI,MAAM,EAAE,UAAU,CAAC,CAAC;AACtC,cAAM,SAAS;AACf,eAAO,MAAM,MAAM,QAAQ,EAAE,OAAO,MAAM;AAAA,MAAA;AAE5C,YAAM,SAAS,aAAa,EAAE,OAAO,GAAG,OAAO,MAAM,OAAO,OAAO,eAAe,QAAQ,MAAA,CAAO;AACjG,YAAM,QAAQ,WAAW,EAAE,OAAO,QAAQ,OAAO,OAAO;AACjD,aAAA,SAAS,UAAU,EAAE,OAAO,MAAM,OAAO,MAAM,OAAO;AAAA,IAAA;AAExD,WAAA;AAAA,EAAA;AAAA,EAGF,KAAK,MAAuB;AAC3B,UAAA,SAAgB,OAAO,OAAO,OAAO,OAAO,OAAO,eAAe,IAAI,CAAC,GAAG,IAAI;AACpF,WAAO,OAAO;AAGP,WAAA;AAAA,EAAA;AAAA,EAGD,UAAU,OAAsB,IAAI,UAAU,MAAM;AAC1D,QAAI,CAAC,SAAS;AAEZ,aAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,OAAO;AAChC,cAAM,OAAO,KAAK,EAAE,KAAK,CAAC;AAC1B,aAAK,aAAa,IAAI;AACtB,aAAK,KAAK,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK;AAAA,MAAA,CAChC;AACD;AAAA,IAAA;AAEF,WAAO,KAAK,IAAI,EAAE,IAAI,CAAC,OAAO;AAC5B,YAAM,OAAO,KAAK,EAAE,KAAK,CAAC;AAC1B,WAAK,aAAa,IAAI;AACjB,WAAA,KAAK,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,QAAQ,EAAE,GAAG,GAAG,KAAK;AAAA,IAAA,CACrD;AAAA,EAAA;AAAA,EAGI,OAAO;AACR,QAAA,KAAK,KAAK,eAAe,GAAG;AAC9B,aAAO,EAAE,SAAS,MAAM,UAAU,KAAK,QAAQ;AAAA,IAAA;AAEjD,UAAM,UAAU,KAAK,KAAK,UAAU,KAAK,KAAK,cAAc;AAC5D,YAAQ,UAAU;AAClB,SAAK,KAAK,iBAAiB,KAAK,KAAK,UAAU,KAAK,KAAK,YAAY;AAErE,UAAM,WAAW,KAAK,kBAAkB,QAAQ,UAAU;AAC1D,UAAM,WAAW,KAAK,kBAAkB,QAAQ,UAAU;AAE1D,QAAI,CAAC,UAAU;AACb,aAAO,EAAE,SAAS,MAAM,UAAU,KAAK,QAAQ;AAAA,IAAA;AAGjD,YAAQ,QAAQ,WAAW;AAAA,MACzB,KAAK;AACM,iBAAA,UAAU,QAAQ,YAAY,KAAK;AAC5C;AAAA,MACF,KAAK,eAAe;AAClB,YAAI,QAAQ,YAAY;AACtB,mBAAS,UAAU,QAAQ,YAAY,QAAQ,OAAO;AAAA,QAAA;AAElD,cAAA,EAAE,WAAW,YAAY,EAAE,QAAQ,QAAQ,UAAU;AAC3D,iBAAS,SAAS,OAAO,QAAQ,GAAG,MAAM;AAC1C,iBAAS,KAAK,UAAU;AACxB;AAAA,MAAA;AAAA,MAEF,KAAK,eAAe;AAClB,YAAI,QAAQ,YAAY;AACb,mBAAA,UAAU,QAAQ,YAAY,KAAK;AAAA,QAAA;AAExC,cAAA,EAAE,UAAU,YAAY,EAAE,QAAQ,QAAQ,UAAU;AACjD,iBAAA,SAAS,QAAQ,CAAC,QAAQ;AAC7B,cAAA,OAAO,QAAQ,GAAG,KAAK;AAAA,QAAA,CAC5B;AACD,iBAAS,KAAK,SAAS;AACvB;AAAA,MAAA;AAAA,MAEF,KAAK,eAAe;AACZ,cAAA,EAAE,IAAI,QAAA,IAAY;AACrB,WAAA,QAAQ,CAAC,GAAG,MAAM;AACnB,mBAAS,SAAS,OAAO,GAAG,GAAG,QAAQ,CAAC,CAAC;AAAA,QAAA,CAC1C;AACQ,iBAAA,KAAK,UAAU,GAAG;AACtB,aAAA,UAAU,QAAQ,YAAY,KAAK;AACxC;AAAA,MAAA;AAAA,MAEF,KAAK,eAAe;AACZ,cAAA,EAAE,IAAI,QAAA,IAAY;AACxB,iBAAS,SAAS,QAAQ,CAAC,KAAK,MAAM;AACpC,mBAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;AAC9B,gBAAA,OAAO,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,UAAA;AAAA,QACpC,CACD;AACQ,iBAAA,KAAK,SAAS,GAAG;AACrB,aAAA,UAAU,QAAQ,YAAY,KAAK;AACxC;AAAA,MAAA;AAAA,MAEF,KAAK,QAAQ;AACX,cAAM,EAAE,KAAK,OAAO,MAAM,MAAA,IAAU,QAAQ;AAC5C,cAAM,EAAE,KAAK,KAAK,MAAM,IAAA,IAAQ,QAAQ;AACxC,cAAM,EAAE,QAAQ,MAAM,OAAO,KAAA,IAAS,YAAY;AAAA,UAChD,QAAQ,QAAQ;AAAA,UAChB,MAAM;AAAA,QAAA,CACP;AACD,YAAI,UAAU;AACF,oBAAA,SAAS,UAAU,QAAQ,YAAY;AAAA,YAC/C,KAAK;AAAA,YACL,MAAM;AAAA,YACN,QAAQ,QAAQ;AAAA,YAChB,OAAO,QAAQ;AAAA,UAAA,CAChB;AAAA,QAAA;AAEO,kBAAA,SAAS,UAAU,QAAQ,UAAU;AAAA,UAC7C,KAAK;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,MAAM;AAAA,UACd,OAAO,MAAM;AAAA,QAAA,CACd;AAEQ,iBAAA,UAAU,QAAQ,YAAY,KAAK;AAE5C,YAAI,QAAQ,WAAW;AACZ,mBAAA,UAAU,QAAQ,WAAW,KAAK;AAAA,QAAA;AAE7C;AAAA,MAAA;AAAA,IACF;AAEF,SAAK,QAAQ,eAAe,QAAQ,SAAS,GAAG,IAAI;AAC7C,WAAA;AAAA,MACL;AAAA,MACA,UAAU,CAAC,EAAE,eAAe,eAA0B;;AACpD,uBAAS,YAAT,mBAAkB,KAAK,UAAS,aAAQ,mBAAR,mBAAwB;AAAA,MAAQ;AAAA,IAEpE;AAAA,EAAA;AAAA,EAGK,OAAO;AACZ,QAAI,KAAK,KAAK,eAAe,KAAK,KAAK,KAAK,UAAU,QAAQ;AAC5D,aAAO,EAAE,SAAS,MAAM,UAAU,KAAK,QAAQ;AAAA,IAAA;AAEjD,UAAM,UAAU,KAAK,KAAK,UAAU,EAAE,KAAK,KAAK,YAAY;AAC5D,YAAQ,UAAU;AAClB,SAAK,KAAK,iBAAiB;AAE3B,UAAM,WAAW,KAAK,kBAAkB,QAAQ,UAAU;AAC1D,UAAM,WAAW,KAAK,kBAAkB,QAAQ,UAAU;AAE1D,QAAI,CAAC,UAAU;AACb,aAAO,EAAE,SAAS,MAAM,UAAU,KAAK,QAAQ;AAAA,IAAA;AAGjD,YAAQ,QAAQ,WAAW;AAAA,MACzB,KAAK;AACH,iBAAS,UAAU,QAAQ,WAAW,QAAQ,OAAO;AACrD;AAAA,MACF,KAAK,eAAe;AAClB,YAAI,QAAQ,WAAW;AACrB,mBAAS,UAAU,QAAQ,WAAW,QAAQ,OAAO;AAAA,QAAA;AAEjD,cAAA,EAAE,WAAW,YAAY,EAAE,QAAQ,QAAQ,UAAU;AAC3D,iBAAS,SAAS,OAAO,QAAQ,GAAG,GAAG,GAAG,QAAQ,QAAQ;AAC1D,iBAAS,KAAK,UAAU;AACxB;AAAA,MAAA;AAAA,MAEF,KAAK,eAAe;AAClB,YAAI,QAAQ,WAAW;AACrB,mBAAS,UAAU,QAAQ,WAAW,QAAQ,OAAO;AAAA,QAAA;AAEjD,cAAA,EAAE,UAAU,YAAY,EAAE,QAAQ,QAAQ,UAAU;AAC1D,iBAAS,SAAS,IAAI,CAAC,KAAK,MAAM;AAC5B,cAAA,OAAO,QAAQ,GAAG,GAAG,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QAAA,CAChD;AACD,iBAAS,KAAK,SAAS;AACvB;AAAA,MAAA;AAAA,MAEF,KAAK,eAAe;AAClB,iBAAS,WAAW;AAAA,UAClB,GAAG,QAAQ,GAAG,CAAC;AAAA,UACf,SAAS,QAAQ,GAAG;AAAA,UACpB,UAAU;AAAA,UACV,gBAAgB,QAAQ;AAAA,UACxB,gBAAgB,QAAQ;AAAA,QAAA,CACzB;AACD;AAAA,MAAA;AAAA,MAEF,KAAK,eAAe;AAClB,iBAAS,WAAW;AAAA,UAClB,GAAG,QAAQ,GAAG,CAAC;AAAA,UACf,SAAS,QAAQ,GAAG;AAAA,UACpB,UAAU;AAAA,UACV,gBAAgB,QAAQ;AAAA,UACxB,gBAAgB,QAAQ;AAAA,QAAA,CACzB;AACD;AAAA,MAAA;AAAA,MAEF,KAAK,QAAQ;AACL,cAAA,EAAE,KAAK,IAAA,IAAQ;AACrB,YAAI,UAAU;AACH,mBAAA,KAAK,EAAE,UAAU,KAAK,KAAK,UAAU,QAAQ,aAAa,OAAO;AAAA,QAAA;AAAA,MAC5E;AAAA,IACF;AAEF,SAAK,QAAQ,eAAe,QAAQ,SAAS,GAAG,IAAI;AAC7C,WAAA;AAAA,MACL;AAAA,MACA,UAAU,CAAC,EAAE,eAAe,eAA0B;;AACpD,uBAAS,YAAT,mBAAkB,KAAK,UAAS,aAAQ,mBAAR,mBAAwB;AAAA,MAAQ;AAAA,IAEpE;AAAA,EAAA;AAAA,EAEK,YAAY,MAAc;AACxB,WAAA,KAAK,UAAU,IAAI;AAAA,EAAA;AAAA,EAGrB,SAAS,KAAyB,GAAW;AAClD,QAAI,OAAO,MAAM;AACR,aAAA;AAAA,IAAA;AAEH,UAAA,UAAU,KAAK,SAAS,GAAG;AACjC,WAAO,mCAAU;AAAA,EAAC;AAAA,EAEb,UAAU;AACR,WAAA;AAAA,EAAA;AAAA,EAGF,eAAe,OAAkB;AAChC,UAAA,KAAK,KAAK,MAAM,KAAK;AAC3B,WAAO,KAAK,KAAK,aAAa,IAAI,EAAE;AAAA,EAAA;AAAA,EAE/B,eAAe,OAAkB,OAAY;AAC5C,UAAA,KAAK,KAAK,MAAM,KAAK;AAC3B,SAAK,KAAK,aAAa,IAAI,IAAI,KAAK;AAAA,EAAA;AAAA,EAE/B,oBAAoB;AACpB,SAAA,KAAK,aAAa,MAAM;AAAA,EAAA;AAAA,EAExB,YAAY,OAAO,OAAO;AAC/B,QAAI,MAAM;AACD,aAAA;AAAA,IAAA;AAEF,WAAA,eAAe,KAAK,SAAS;AAAA,EAAA;AAAA,EAE/B,YAAYhD,QAAe;AAC1B,UAAA,QAAQA,OAAM,MAAM,GAAG;AACzB,QAAA,CAAC,OAAO,GAAG,IAAI;AACf,QAAA,MAAM,MAAM,WAAW,GAAG;AACnB,eAAA;AAAA,IAAA;AAEP,QAAA,MAAM,MAAM,QAAQ,GAAG;AACzB,cAAQ,IAAI,KAAK;AAAA,IAAA;AAEf,QAAA,2BAAK,MAAM,cAAc;AAC3B,aAAO,KAAK;AAAA,IAAA;AAEV,QAAA,2BAAK,MAAM,WAAW;AACxB,YAAM,GAAG,IAAI,KAAK,KAAK,CAAC,GAAG,GAAG;AAAA,IAAA;AAEhC,UAAM,EAAE,GAAG,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK;AAC/B,UAAA,EAAE,GAAG,QAAQ,GAAG,UAAU,IAAI,OAAO,KAAK;AACzC,WAAA;AAAA,MACL,KAAK,KAAK,IAAI,GAAG;AAAA,MACjB,MAAM,KAAK,IAAI,IAAI;AAAA,MACnB,QAAQ,KAAK,IAAI,MAAM;AAAA,MACvB,OAAO,KAAK,IAAI,KAAK;AAAA,IACvB;AAAA,EAAA;AAAA,EAGF,IAAI,UAAiB;AACZ,WAAA;AAAA,EAAA;AAEX;AC17Da,MAAA,aAAa,CAAC,MAAoD;AAC7E,MAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AACtB,WAAA,EAAuB,QAAQ,SAAS;AAAA,EAAA;AAElD,MAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AAC9B,UAAM,aAAa;AAEnB,WAAO,CAAC,EAAE,WAAW,UAAU,MAAM,WAAW,WAAW;AAAA,EAAA;AAEtD,SAAA;AACT;AAKa,MAAA,qBAAqB,CAAC,MAAiD;AAClF,MAAI,CAAC,EAAE,KAAK,WAAW,OAAO,GAAG;AAC/B,MAAE,eAAe;AAAA,EAAA;AAErB;ACWO,MAAM,OAAkB,KAAK,CAAC,EAAE,GAAG,QAAQ;AAC1C,QAAA,QAAQ,IAAI,CAAC;AACb,QAAA,QAAQ,IAAI,CAAC;AACnB,QAAM,UAAU,GAAG,KAAK,GAAG,KAAK;AAChC,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AACxC,QAAA,iBAAiB,OAAO,IAAI;AAE5B,QAAA,UAAU,OAA6B,IAAI;AAC3C,QAAA;AAAA,IACJ,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,QAAQ,SAAS;AAGjB,QAAA,gBAAgB,gBAAgB,KAAK;AAErC,QAAA,cAAc,+BAAO,KAAK;AAE1B,QAAA,gBAAgB,WAAW,aAAa;AAE9C,QAAM,UAAU,mBAAmB;AACnC,QAAM,UAAU,SAAS,MAAM,KAAK,SAAS,MAAM;AAC7C,QAAA,iBAAiB,YAAY,MAAM;;AACjC,UAAA,QAAO,aAAQ,YAAR,mBAAiB;AAC9B,QAAI,QAAQ,MAAM;AACT,aAAA;AAAA,IAAA;AAET;AAAA,MACE,cAAc;AAAA,QACZ,GAAG,KAAK;AAAA,QACR,GAAG,KAAK;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,OAAO,KAAK;AAAA,MACb,CAAA;AAAA,IACH;AAAA,EACF,GAAG,EAAE;AAEL,YAAU,MAAM;AAEV,QAAA,WAAW,CAAC,eAAe,SAAS;AACvB,qBAAA;AACf;AAAA,IAAA;AAEF,mBAAe,UAAU;AAAA,EAAA,GACxB,CAAC,SAAS,OAAO,CAAC;AAErB,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EAAA;AAGT,QAAM,OAAO,MAAM,eAAe,EAAE,GAAG,KAAK,QAAQ;AAC9C,QAAA,YAAY,YAAY,CAAC,UAAkB;AAC/C,aAAS,MAAM,EAAE,MAAM,CAAC,CAAC;AAAA,EAC3B,GAAG,EAAE;AAEC,QAAA,OAAO,YAAY,CAAC8C,WAAqB;AACpC,aAAA,SAAS,EAAE,eAAe,EAAE,SAASA,OAAM,QAAU,EAAA,CAAC,CAAC;AAAA,EAClE,GAAG,EAAE;AAEL,MAAI,eAAe;AACf,MAAA;AACA,MAAA;AACS,eAAA,MAAM,OAAO,EAAE,OAAO,OAAO,EAAE,GAAG,KAAK,MAAM;AAAA,WACjD,GAAQ;AACf,QAAI,aAAa,cAAc;AAC7B,qBAAe,EAAE;AACjB,iBAAW,EAAE;AAAA,IAAA,OACR;AACL,qBAAe,EAAE;AACN,iBAAA;AACX,cAAQ,MAAM,CAAC;AAAA,IAAA;AAAA,EACjB;AAGF,QAAM,QAAQ,UAAU;AAExB,QAAM,kBAAkB,CAAC,EAAE,MAAM,KAAK,kBAAkB;AAExD,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAA2C;AAC1C,QAAE,gBAAgB;AAClB,yBAAmB,CAAC;AAEhB,UAAA,CAAC,WAAW,CAAC,GAAG;AACX,eAAA;AAAA,MAAA;AAET,UAAI,CAAC,OAAO;AACH,eAAA;AAAA,MAAA;AAIT,UAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AAE9B,YAAI,mBAAmB,OAAO;AAC5B,gBAAM,KAAK;AAAA,QAAA;AAEb,iBAAS,OAAO,EAAE,GAAG,EAAG,CAAA,CAAC;AAChB,iBAAA,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,EAAG,CAAA,CAAC;AACpD,eAAA;AAAA,MAAA;AAIT,UAAI,EAAE,UAAU;AACd,iBAAS,KAAK,EAAE,GAAG,EAAG,CAAA,CAAC;AAAA,MAAA,OAClB;AACI,iBAAA,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,IAAI,MAAM,GAAI,CAAA,CAAC;AAAA,MAAA;AAGtD,eAAA,YAAY,IAAI,CAAC;AACpB,YAAA,cAAc,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,OAAO;AAClE,UAAI,iBAAiB;AACb,cAAA,WAAW,UAAU,EAAE,OAAO,eAAe,MAAM,KAAK,aAAa;AAC3E,YAAI,UAAU;AACL,iBAAA;AAAA,QAAA;AAAA,MACT;AAGF,YAAM,KAAK,cAAc;AACzB,YAAM,MAAM;AACH,eAAA,kBAAkB,EAAE,CAAC;AAE9B,UAAI,oBAAoB;AACf,eAAA;AAAA,MAAA;AAGT,UAAI,iBAAiB;AACnB,kBAAU,MAAM,KAAK;AAAA,MAAA;AAEnB,UAAA,CAAC,EAAE,UAAU;AACf,iBAAS,OAAO,EAAE,GAAG,EAAG,CAAA,CAAC;AAAA,MAAA;AAEpB,aAAA;AAAA,IACT;AAAA,IACA,CAAC,iBAAiB,OAAO,SAAS,eAAe,aAAa,oBAAoB,SAAS;AAAA,EAC7F;AAEA,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAA2C;AAC1C,QAAE,gBAAgB;AAClB,UAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AAC9B;AAAA,MAAA;AAGF,yBAAmB,CAAC;AACX,eAAA,YAAY,KAAK,CAAC;AAC3B,UAAI,oBAAoB;AACb,iBAAA,eAAe,kBAAkB,CAAC;AAC3C,uCAAO;AACA,eAAA;AAAA,MAAA;AAET,UAAI,iBAAiB;AACnB,iBAAS,KAAK,EAAE,GAAG,IAAI,GAAG,GAAA,CAAI,CAAC;AAAA,MAAA;AAAA,IAEnC;AAAA,IACA,CAAC,oBAAoB,iBAAiB,KAAK;AAAA,EAC7C;AAEA,QAAM,iBAAiB;AAAA,IACrB,CAAC,MAA2C;AACtC,UAAA,CAAC,WAAW,CAAC,GAAG;AACX,eAAA;AAAA,MAAA;AAIT,UAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AACvB,eAAA;AAAA,MAAA;AAGT,yBAAmB,CAAC;AACpB,QAAE,gBAAgB;AAElB,UAAI,oBAAoB;AACtB,iBAAS,sBAAsB,EAAE,GAAG,EAAG,CAAA,CAAC;AACjC,eAAA;AAAA,MAAA;AAET,UAAI,qBAAqB;AACd,iBAAA,KAAK,EAAE,GAAG,GAAG,MAAM,WAAW,EAAA,CAAG,CAAC;AACpC,eAAA;AAAA,MAAA;AAET,UAAI,oBAAoB;AACb,iBAAA,KAAK,EAAE,GAAG,MAAM,WAAc,GAAA,EAAA,CAAG,CAAC;AACpC,eAAA;AAAA,MAAA;AAET,UAAI,mBAAmB,CAAC,gBAAgB,eAAe,IAAI,GAAG;AACrD,eAAA;AAAA,MAAA;AAET,eAAS,KAAK,EAAE,GAAG,EAAG,CAAA,CAAC;AAEvB,UAAI,iBAAiB;AACb,cAAA,UAAU,WAAW,EAAE,GAAG,eAAe,MAAM,GAAG,MAAM,GAAG;AAC3D,cAAA,YAAY,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,YAAY,OAAO,CAAC;AAC7E,kBAAU,EAAE,OAAO,eAAe,MAAM,KAAK,WAAW;AAAA,MAAA;AAGnD,aAAA;AAAA,IACT;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAEM,QAAA,0BAA0B,YAAY,CAAC,MAAwB;AACnE,aAAS,sBAAsB,EAAE,GAAG,EAAG,CAAA,CAAC;AAC/B,aAAA,YAAY,IAAI,CAAC;AAC1B,MAAE,gBAAgB;AAAA,EACpB,GAAG,EAAE;AAGL,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAA8C;AACzC,UAAA,iBAAiB,SAAS,GAAG;AAC/B,UAAE,gBAAgB;AAClB,2BAAmB,CAAC;AACX,iBAAA,uBAAuB,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,CAAC,CAAC;AACxD,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IACT;AAAA,IACA,CAAC,iBAAiB,MAAM;AAAA,EAC1B;AAEA,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAA8C;AAC7C,QAAE,gBAAgB;AAClB,yBAAmB,CAAC;AACpB,wBAAkB,OAAO;AACnB,YAAA,WAAW,SAAS,YAAY,aAAa;AAC1C,eAAA,UAAU,YAAY,MAAM,IAAI;AACzC,qCAAO,cAAc;AACd,aAAA;AAAA,IACT;AAAA,IACA,CAAC,SAAS,KAAK;AAAA,EACjB;AAEM,QAAA,oBAAoB,QAAQ,MAAM;AACtC,QAAI,CAAC,WAAW,WAAW,cAAc,WAAW,IAAI;AAC/C,aAAA;AAAA,IAAA;AAGT,QAAI,cAAc,WAAW,KAAK,cAAc,UAAU,GAAG;AACpD,aAAA;AAAA,IAAA;AAEF,WAAA;AAAA,EACN,GAAA,CAAC,SAAS,SAAS,aAAa,CAAC;AAEpC,MAAI,CAAC,OAAO;AACV,WACG,oBAAA,MAAA,EAAW,UAAQ,GAAG,UAAQ,GAAG,gBAAc,SAAS,WAAU,qBACjE,UAAC,qBAAA,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,MAAA,oBAAC,SAAI,WAAU,iBACb,8BAAC,OAAI,EAAA,WAAU,oBAAmB,EACpC,CAAA;AAAA,MACA,oBAAC,OAAI,EAAA,WAAU,mBAAmB,CAAA;AAAA,IAAA,EACpC,CAAA,KANO,CAOT;AAAA,EAAA;AAKF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,KAAK;AAAA,MACL,UAAQ;AAAA,MACR,UAAQ;AAAA,MACR,gBAAc;AAAA,MACd,WAAW,WAAW,MAAM,eAAe,EAAE,GAAG,EAAG,CAAA,IAAI,iBAAiB,EAAE,IAAI,UAAU,gBAAgB,EAAE,IACxG,UAAU,eAAe,EAC3B;AAAA,MACA,OAAO;AAAA,QACL,GAAG,6BAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MAEA,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,UACX,aAAa;AAAA,UACb,cAAc;AAAA,UACd,cAAc;AAAA,UACd,WAAW;AAAA,UAEX,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA,gBACX,OAAO;AAAA,kBACL,GAAG,6BAAM;AAAA,kBACT,iBAAgB,6BAAM,mBAAkB;AAAA,kBACxC,aAAY,6BAAM,eAAc;AAAA,gBAClC;AAAA,gBAEC,UAAA;AAAA,kBAAA,gBAAiB,oBAAA,OAAA,EAAI,WAAU,6BAA4B,OAAO,cAAc;AAAA,kBAChF,eAAe,oBAAC,OAAI,EAAA,WAAU,iBAAiB,UAAQ,SAAA;AAAA,kBACvD,oBAAA,OAAA,EAAI,WAAU,oBAAoB,UAAS,SAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC9C;AAAA,YACC,oBAAA,OAAA,EAAI,WAAW,mBAAmB,aAAa,wBAAyB,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAC3E;AAAA,IAlCK;AAAA,EAmCP;AAEJ,CAAC;ACvUD,MAAM,eAAe;AACrB,MAAM,WAAW;AAEjB,IAAI,kBAAiB,oBAAI,KAAK,GAAE,QAAQ;AACxC,IAAI,eAAe;AAEH,SAAA,aAAa,EAAE,OAAO,aAAa,GAAG,WAAW,GAAG,YAAY,MAAa;AACrF,QAAA,YAAY,OAAsB,IAAI;AAC5C,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AACxC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,QAAQ,SAAS;AAEvB,MAAI,cAAc;AACZ,QAAA,gBAAgB,gBAAgB,KAAK;AAC3C,QAAM,kBAAkB,CAAC,GAAE,+BAAO,KAAK,mBAAkB;AAEzD,QAAM,cAAc;AAAA,IAClB,CAAC,MAAwB;AACvB,UAAI,CAAC,OAAO;AACV,eAAO,EAAE,GAAG,IAAI,GAAG,GAAG;AAAA,MAAA;AAEpB,UAAA,cAAc,KAAK,YAAY,GAAG;AAC9B,cAAA,cAAc,WAAW,QAAS,sBAAsB;AAC9D,cAAM,EAAE,MAAM,KAAK,OAAO,OAAW,IAAA;AACrC,qBAAa,EAAE,QAAQ,QAAQ,IAAI,EAAE,QAAQ,OAAO,KAAK;AACzD,YAAI,eAAe,GAAG;AACpB,qBAAW,EAAE,QAAQ,SAAS,IAAI,EAAE,QAAQ,MAAM,KAAK;AAAA,QAAA;AAAA,MACzD;AAEI,YAAA,OAAO,iBAAiB,WAAW,OAAQ;AACjD,UAAI,EAAE,MAAM,GAAG,MAAM,EAAM,IAAA;AAC3B,UAAI,YAAY;AACd,YAAI,aAAa,IAAI,KAAK,QAAQ,KAAK;AAAA,iBAC9B,UAAU;AACnB,YAAI,WAAW,IAAI,KAAK,SAAS,KAAK;AAAA,MAAA;AAEjC,aAAA,EAAE,GAAG,EAAE;AAAA,IAChB;AAAA,IACA,CAAC,OAAO,YAAY,UAAU,aAAa;AAAA,EAC7C;AAEA,QAAM,aAAa;AAAA,IACjB,CAAC,MAAwB;AACvB,UAAI,CAAC,eAAe,WAAW,YAAY,QAAQ,CAAC,OAAO;AACzD;AAAA,MAAA;AAEF,YAAM,OAAM,oBAAI,KAAK,GAAE,QAAQ;AAC3B,UAAA,MAAM,iBAAiB,KAAM;AAChB,uBAAA;AAAA,MAAA;AAEA,uBAAA;AAEjB,iBAAW,QAAQ,SAAS;AAAA,QAC1B,MAAM,eAAe;AAAA,QACrB,KAAK,eAAe;AAAA,MAAA,CACrB;AACD,gBAAU,QAAS,MAAM;AAEzB,YAAM,EAAE,GAAG,MAAM,YAAY,CAAC;AAC9B,UAAI,oBAAoB;AACtB,cAAM,EAAE,GAAG,MAAM,GAAG,KAAS,IAAA;AAC7B,iBAAS,sBAAsB,EAAE,GAAG,MAAM,KAAK,OAAO,GAAG,GAAG,MAAM,KAAK,OAAO,EAAG,CAAA,CAAC;AAAA,MAAA,OAC7E;AACL,YAAI,iBAAiB;AACb,gBAAA,UAAU,WAAW,EAAE,GAAG,eAAe,MAAM,GAAG,MAAM,GAAG;AACjE,gBAAM,cAAc,MAAM,YAAY,CAAC,aAAa;AAC9C,gBAAA,aAAa,YAAY,OAAO;AACtC,gBAAM,YAAY,GAAG,WAAW,GAAG,UAAU;AAC7C,oBAAU,EAAE,OAAO,UAAU,SAAS,KAAK,WAAW;AAAA,QAAA;AAExD,iBAAS,KAAK,EAAE,GAAG,EAAG,CAAA,CAAC;AAAA,MAAA;AAEzB,qBAAe,KAAK,IAAI,eAAe,cAAc,QAAQ;AAC7D,gBAAU,UAAU,sBAAsB,MAAM,WAAW,CAAC,CAAC;AAAA,IAC/D;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,mBAAmB;AAAA,IACvB,CAAC,MAAwB;AACvB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,UAAI,aAAa;AACf;AAAA,MAAA;AAEY,oBAAA;AAEV,UAAA,eAAe,KAAK,aAAa,GAAG;AAChC,cAAA,cAAc,WAAW,QAAS,sBAAsB;AAC9D,cAAM,EAAE,MAAM,KAAK,OAAO,OAAW,IAAA;AAErC,oCAAe,EAAE,QAAQ,QAAQ,IAAI,EAAE,QAAQ,OAAO,KAAK;AAC3D,YAAI,eAAe,GAAG;AACpB,kCAAa,EAAE,QAAQ,SAAS,IAAI,EAAE,QAAQ,MAAM,KAAK;AAAA,QAAA;AAAA,MAC3D;AAEF,gBAAU,UAAU,sBAAsB,MAAM,WAAW,CAAC,CAAC;AAAA,IAC/D;AAAA,IACA,CAAC,aAAa,YAAY,UAAU,UAAU;AAAA,EAChD;AAEM,QAAA,aAAa,YAAY,MAAM;;AAC/B,QAAA,UAAU,YAAY,MAAM;AAC9B,2BAAqB,UAAU,OAAO;AACtC,gBAAU,UAAU;AAAA,IAAA;AAER,kBAAA;AACd,QAAI,CAAC,QAAQ,eAAe,OAAO,GAAG;AAEpC,4BAAU,YAAV,mBAAmB,UAAnB;AAAA,IAA2B;AAAA,EAE/B,GAAG,EAAE;AAEL,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAAwB;AACvB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AACZ,YAAA,OAAO,iBAAiB,WAAW,OAAQ;AACjD,UAAI,KAAK,WAAW,MAAM,KAAK,UAAU,IAAI;AAC3C;AAAA,MAAA;AAGF,YAAM,EAAE,GAAG,MAAM,YAAY,CAAC;AAC9B,UAAI,oBAAoB;AACtB,cAAM,EAAE,GAAG,MAAM,GAAG,KAAS,IAAA;AAC7B,iBAAS,eAAe,EAAE,GAAG,MAAM,KAAK,OAAO,GAAG,GAAG,MAAM,KAAK,OAAO,EAAG,CAAA,CAAC;AAC3E,kBAAU,QAAS,MAAM;AAAA,MAAA,OACpB;AACL,YAAI,iBAAiB;AAEnB,mBAAS,KAAK,EAAE,GAAG,IAAI,GAAG,GAAA,CAAI,CAAC;AAAA,QAAA;AAAA,MACjC;AAAA,IAEJ;AAAA,IACA,CAAC,oBAAoB,iBAAiB,WAAW;AAAA,EACnD;AAEA,QAAM,uBAAuB;AAAA,IAC3B,CAAC,MAAwB;AACZ,iBAAA;AACF,eAAA,YAAY,KAAK,CAAC;AACL,4BAAA,MAAM,cAAc,CAAC,CAAC;AAAA,IAC9C;AAAA,IACA,CAAC,YAAY,aAAa;AAAA,EAC5B;AAEM,QAAA,mBAAmB,YAAY,MAAM;AAC9B,eAAA;AAAA,EAAA,GACV,CAAC,UAAU,CAAC;AAEf,YAAU,MAAM;AACP,WAAA;AAAA,EAAA,GACN,CAAC,UAAU,CAAC;AAEf,MAAI,CAAC,UAAU,WAAY,CAAC,YAAY,CAAC,oBAAqB;AAC5D,WAAQ,oBAAA,OAAA,EAAI,WAAW,8BAA8B,SAAS,IAAI;AAAA,EAAA;AAIlE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAW,oBAAoB,SAAS;AAAA,MACxC,WAAW,CAAC,MAAM;AAChB,6BAAqB,CAAC;AAAA,MACxB;AAAA,MACA,cAAc;AAAA,MACd,cAAc;AAAA,IAAA;AAAA,EAChB;AAEJ;AC9KO,MAAM,gBAA2B,KAAK,CAAC,EAAE,QAAQ;AAChD,QAAA,QAAQ,IAAI,CAAC;AACnB,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AAExC,QAAA;AAAA,IACJ,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,QAAQ,SAAS;AAEjB,QAAA,MAAM,+BAAO,eAAe,EAAE,GAAG,GAAG,KAAK;AACzC,QAAA,SAAQ,2BAAK,UAAS;AAEtB,QAAA,gBAAgB,gBAAgB,KAAK;AACrC,QAAA,cAAc,+BAAO,KAAK;AAEhC,QAAM,kBAAkB,CAAC,GAAE,+BAAO,KAAK,mBAAkB;AAEzD,QAAM,YAAY;AAAA,IAChB,CAAC,UAAkB;AACjB,eAAS,MAAM,EAAE,OAAO,OAAO,SAAU,CAAA,CAAC;AAAA,IAC5C;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEM,QAAA,wBAAwB,YAAY,CAAC,MAAwB;AACxD,aAAA,qBAAqB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,MAAE,gBAAgB;AAClB,uBAAmB,CAAC;AAAA,EACtB,GAAG,EAAE;AAEL,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAA2C;AAC1C,QAAE,gBAAgB;AAClB,yBAAmB,CAAC;AAEpB,UAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO;AACrB,eAAA;AAAA,MAAA;AAGT,UAAI,UAAU;AACL,eAAA;AAAA,MAAA;AAIT,UAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AAE1B,YAAA,mBAAmB,UAAU,SAAS;AACxC,oBAAU,QAAQ,KAAK;AAAA,QAAA;AAEzB,iBAAS,OAAO,EAAE,GAAG,GAAG,EAAG,CAAA,CAAC;AAC5B,iBAAS,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,MAAM,WAAW,GAAG,MAAM,EAAG,CAAA,CAAC;AACrE,eAAA;AAAA,MAAA;AAGA,eAAA,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,IAAI,MAAM,EAAG,CAAA,CAAC;AACtD,YAAA,cAAc,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,KAAK,IAAI,KAAK;AACzE,UAAI,iBAAiB;AACb,cAAA,WAAW,UAAU,EAAE,OAAO,eAAe,MAAM,KAAK,aAAa;AAC3E,YAAI,UAAU;AACZ,mBAAS,OAAO,EAAE,QAAQ,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,EAAG,CAAA,CAAC;AACrE,iBAAA;AAAA,QAAA;AAAA,MACT;AAGF,UAAI,SAAS,EAAE,WAAW,cAAc,SAAS;AACjD,UAAI,WAAW,IAAI;AACjB,iBAAS,SAAS;AAAA,MAAA;AAGpB;AAAA,QACE,WAAW;AAAA,UACT,OAAO,EAAE,OAAO,QAAQ,KAAK,EAAE;AAAA,UAC/B,SAAS,MAAM,WAAW;AAAA,QAC3B,CAAA;AAAA,MACH;AAEA,UAAI,iBAAiB;AACT,mBAAA,2CAAa,UAAS,EAAE;AAAA,MAAA;AAEpC,eAAS,OAAO,EAAE,GAAG,GAAG,GAAG,OAAA,CAAQ,CAAC;AAC3B,eAAA,kBAAkB,EAAE,CAAC;AACrB,eAAA,YAAY,IAAI,CAAC;AAE1B,UAAI,oBAAoB;AACf,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IACT;AAAA,IACA,CAAC,UAAU,iBAAiB,eAAe,OAAO,aAAa,eAAe,UAAU,kBAAkB;AAAA,EAC5G;AAEA,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAA2C;AAC1C,QAAE,gBAAgB;AAClB,UAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AAC9B;AAAA,MAAA;AAGF,yBAAmB,CAAC;AACX,eAAA,YAAY,KAAK,CAAC;AAC3B,UAAI,oBAAoB;AACtB,kBAAU,QAAS,MAAM;AAClB,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IACA,CAAC,kBAAkB;AAAA,EACrB;AAEM,QAAA,iBAAiB,oBAAoB,CAAC,MAA2C;AACrF,QAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO;AACrB,aAAA;AAAA,IAAA;AAGT,QAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AACvB,aAAA;AAAA,IAAA;AAGT,uBAAmB,CAAC;AACpB,MAAE,gBAAgB;AAElB,QAAI,oBAAoB;AACtB,eAAS,sBAAsB,EAAE,GAAG,GAAG,EAAG,CAAA,CAAC;AACpC,aAAA;AAAA,IAAA;AAGT,QAAI,iBAAiB;AACb,YAAA,UAAU,WAAW,EAAE,GAAG,eAAe,MAAM,GAAG,MAAM,GAAG;AACjE,YAAM,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,KAAK,CAAC;AACtD,YAAA,YAAY,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,IAAI,IAAI,KAAK;AACtE,gBAAU,EAAE,OAAO,eAAe,MAAM,KAAK,WAAW;AAAA,IAAA;AAG1D,QAAI,sBAAsB,MAAM;AACxB,YAAA,EAAE,WAAW;AACnB,UAAI,WAAW,GAAG;AACP,iBAAA,KAAK,EAAE,GAAG,MAAM,WAAc,GAAA,EAAA,CAAG,CAAC;AAAA,MAAA,OACtC;AACL,iBAAS,KAAK,EAAE,GAAG,GAAG,EAAG,CAAA,CAAC;AAAA,MAAA;AAAA,IAC5B;AAEK,WAAA;AAAA,KACN,GAAG;AAEN,MAAI,CAAC,OAAO;AACV,WACG,oBAAA,MAAA,EAAG,UAAQ,GAAG,WAAU,6BACvB,UAAC,oBAAA,OAAA,EAAI,WAAU,oBACb,UAAC,qBAAA,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAAA,oBAAC,gBAAa,OAAO,EAAE,UAAU,WAAW,GAAG,UAAU,IAAI;AAAA,MAC7D,oBAAC,OAAI,EAAA,WAAU,aAAa,CAAA;AAAA,IAAA,EAC9B,CAAA,EACF,CAAA,GACF;AAAA,EAAA;AAKF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,WAAW,mBAAmB,SAAS,MAAM,IAAI,gBAAgB,EAAE,IACjE,QAAQ,EAAE,OAAO,cAAc,QAAQ,KAAK,cAAc,QAAQ,CAAC,IAC/D,qBACE,oBACA,iBACF,EACN;AAAA,MACA,OAAO,EAAE,OAAO,UAAU,OAAO,UAAU,MAAM;AAAA,MACjD,eAAe,CAAC,MAAM;AAChB,YAAA,iBAAiB,SAAS,GAAG;AAC/B,YAAE,gBAAgB;AAClB,6BAAmB,CAAC;AACX,mBAAA,uBAAuB,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,CAAC,CAAC;AACxD,iBAAA;AAAA,QAAA;AAEF,eAAA;AAAA,MACT;AAAA,MAEA,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,aAAa;AAAA,UACb,cAAc;AAAA,UACd,cAAc;AAAA,UACd,WAAW;AAAA,UAEX,UAAA,qBAAC,OAAI,EAAA,WAAU,eAAc,OAAO,EAAE,QAAQ,MAAM,cAAc,UAAU,WAAA,GAC1E,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,UAAU;AAAA,kBACV,QAAQ,qBAAqB,KAAK;AAAA,gBACpC;AAAA,gBACA,UAAU;AAAA,cAAA;AAAA,YACZ;AAAA,YACC,MAAM,SAAS,2BAAK,SAAS,CAAC,KAAK;AAAA,YACpC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA;AAAA,gBAEPZ,aAAwB,2BAAK,YAAY0C,MAAiB,IAAI,iBAAiB,EAAE;AAAA,gBACjF,WAAW,cAAc,EAAE;AAAA,gBAC/B,OAAO,EAAE,QAAQ,MAAM,aAAa;AAAA,gBACpC,aAAa;AAAA,gBAEb,8BAAC,KAAE,CAAA,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACL,EACF,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ,CAAC;ACvNM,MAAM,iBAA4B,KAAK,CAAC,EAAE,QAAQ;AACvD,QAAM,QAAQ,GAAG,IAAI,CAAC,CAAC;AACvB,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AAExC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,QAAQ,SAAS;AAEjB,QAAA,MAAM,+BAAO,eAAe,EAAE,GAAG,GAAG,KAAK;AACzC,QAAA,UAAS,2BAAK,WAAU;AAExB,QAAA,gBAAgB,gBAAgB,KAAK;AACrC,QAAA,cAAc,+BAAO,KAAK;AAEhC,QAAM,kBAAkB,CAAC,GAAE,+BAAO,KAAK,mBAAkB;AAEzD,QAAM,YAAY;AAAA,IAChB,CAAC,UAAkB;AACjB,eAAS,MAAM,EAAE,OAAO,OAAO,SAAU,CAAA,CAAC;AAAA,IAC5C;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEM,QAAA,wBAAwB,YAAY,CAAC,MAAwB;AACxD,aAAA,qBAAqB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,MAAE,gBAAgB;AAClB,uBAAmB,CAAC;AAAA,EACtB,GAAG,EAAE;AAEL,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAA2C;AAC1C,QAAE,gBAAgB;AAClB,yBAAmB,CAAC;AAEpB,UAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO;AACrB,eAAA;AAAA,MAAA;AAET,UAAI,UAAU;AACL,eAAA;AAAA,MAAA;AAIT,UAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AAE1B,YAAA,mBAAmB,UAAU,SAAS;AACxC,oBAAU,QAAQ,KAAK;AAAA,QAAA;AAEzB,iBAAS,OAAO,EAAE,GAAG,GAAG,EAAG,CAAA,CAAC;AAC5B,iBAAS,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,MAAM,WAAW,EAAG,CAAA,CAAC;AACrE,eAAA;AAAA,MAAA;AAIA,eAAA,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAI,CAAA,CAAC;AACtD,YAAA,cAAc,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,KAAK,IAAI,KAAK;AACzE,UAAI,iBAAiB;AACb,cAAA,WAAW,UAAU,EAAE,OAAO,eAAe,MAAM,KAAK,aAAa;AAC3E,YAAI,UAAU;AACZ,mBAAS,OAAO,EAAE,QAAQ,GAAG,QAAQ,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,EAAG,CAAA,CAAC;AACrE,iBAAA;AAAA,QAAA;AAAA,MACT;AAGF,UAAI,SAAS,EAAE,WAAW,cAAc,SAAS;AACjD,UAAI,WAAW,IAAI;AACjB,iBAAS,SAAS;AAAA,MAAA;AAGpB;AAAA,QACE,WAAW;AAAA,UACT,OAAO,EAAE,OAAO,QAAQ,KAAK,EAAE;AAAA,UAC/B,SAAS,MAAM,WAAW;AAAA,QAC3B,CAAA;AAAA,MACH;AAEA,UAAI,iBAAiB;AACT,mBAAA,2CAAa,UAAS,EAAE;AAAA,MAAA;AAEpC,eAAS,OAAO,EAAE,GAAG,QAAQ,GAAG,EAAA,CAAG,CAAC;AAC3B,eAAA,kBAAkB,EAAE,CAAC;AACrB,eAAA,YAAY,IAAI,CAAC;AAE1B,UAAI,oBAAoB;AACf,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IACT;AAAA,IACA,CAAC,UAAU,iBAAiB,eAAe,OAAO,aAAa,eAAe,UAAU,kBAAkB;AAAA,EAC5G;AAEA,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAA2C;AAC1C,QAAE,gBAAgB;AAClB,UAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AAC9B;AAAA,MAAA;AAGF,yBAAmB,CAAC;AACX,eAAA,YAAY,KAAK,CAAC;AAC3B,UAAI,oBAAoB;AACtB,kBAAU,QAAS,MAAM;AAClB,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IACA,CAAC,kBAAkB;AAAA,EACrB;AAEM,QAAA,iBAAiB,oBAAoB,CAAC,MAA2C;AACrF,QAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO;AACrB,aAAA;AAAA,IAAA;AAIT,QAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AACvB,aAAA;AAAA,IAAA;AAGT,uBAAmB,CAAC;AACpB,MAAE,gBAAgB;AAElB,QAAI,oBAAoB;AACtB,eAAS,sBAAsB,EAAE,GAAG,GAAG,EAAG,CAAA,CAAC;AACpC,aAAA;AAAA,IAAA;AAGT,QAAI,iBAAiB;AACb,YAAA,UAAU,WAAW,EAAE,GAAG,eAAe,MAAM,GAAG,MAAM,GAAG;AACjE,YAAM,CAAC,KAAK,MAAM,IAAI,CAAC,IAAI,QAAQ,GAAG,GAAG,IAAI,QAAQ,MAAM,CAAC;AACtD,YAAA,YAAY,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,MAAM;AACtE,gBAAU,EAAE,OAAO,eAAe,MAAM,KAAK,WAAW;AAAA,IAAA;AAG1D,QAAI,sBAAsB,MAAM;AACxB,YAAA,EAAE,WAAW;AACnB,UAAI,WAAW,GAAG;AACP,iBAAA,KAAK,EAAE,GAAG,GAAG,MAAM,WAAW,EAAA,CAAG,CAAC;AAAA,MAAA,OACtC;AACL,iBAAS,KAAK,EAAE,GAAG,GAAG,EAAG,CAAA,CAAC;AAAA,MAAA;AAAA,IAC5B;AAEK,WAAA;AAAA,KACN,GAAG;AAEN,QAAM,oBAAoB;AAAA,IACxB,CAAC,MAA8C;AACzC,UAAA,iBAAiB,SAAS,GAAG;AAC/B,UAAE,gBAAgB;AAClB,2BAAmB,CAAC;AACX,iBAAA,uBAAuB,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,CAAC,CAAC;AACxD,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IACT;AAAA,IACA,CAAC,iBAAiB,MAAM;AAAA,EAC1B;AAEA,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EAAA;AAIP,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,WAAW,oBAAoB,SAAS,MAAM,IAAI,gBAAgB,EAAE,IAClE,QAAQ,EAAE,OAAO,cAAc,QAAQ,KAAK,cAAc,QAAQ,CAAC,IAC/D,sBACE,oBACA,iBACF,EACN;AAAA,MACA,OAAO,EAAE,OAAO;AAAA,MAChB,eAAe;AAAA,MAEf,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,aAAa;AAAA,UACb,cAAc;AAAA,UACd,cAAc;AAAA,UACd,WAAW;AAAA,UAEX,UAAA,qBAAC,OAAI,EAAA,WAAU,eAAc,OAAO,EAAE,OAAO,MAAM,aAAa,UAAU,WAAA,GACxE,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,UAAU;AAAA,kBACV,QAAQ,sBAAsB,KAAK;AAAA,gBACrC;AAAA,gBACA,YAAY;AAAA,cAAA;AAAA,YACd;AAAA,YACC,MAAM,SAAS,2BAAK,SAAS,CAAC,KAAK;AAAA,YACpC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA;AAAA,gBAEP1C,aAAwB,2BAAK,YAAY0C,MAAiB,IAAI,iBAAiB,EAAE;AAAA,gBACjF,WAAW,cAAc,EAAE;AAAA,gBAC/B,OAAO,EAAE,OAAO,MAAM,YAAY;AAAA,gBAClC,aAAa;AAAA,cAAA;AAAA,YAAA;AAAA,UACd,EACH,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ,CAAC;ACpOD,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AACvB,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AACtB,MAAM,gBAAgB;AACtB,MAAM,6BAA6B;AACnC,MAAM,wBAAwB;AAC9B,MAAM,iBAAiB;AAEvB,MAAM,gBAAgB;AAAA,EACpB,OAAO;AAAA,IACL,WAAW;AAAA,IACX,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,WAAW;AAAA,IACX,UAAU;AAAA,IACV,aAAa;AAAA,EAAA;AAEjB;AAQA,MAAM,WAAW,CAAC,KAAY,GAAW,GAAW,OAAe,QAAgB,UAAkB;AACnG,MAAI,YAAY;AAChB,MAAI,SAAS,GAAG,GAAG,OAAO,MAAM;AAClC;AAEA,MAAM,WAAW,CACf,KACA,GACA,GACA,OACA,QACA,OACA,YAAoB,GACpB,cAAwB,CAAA,GACxB,cACG;AACH,MAAI,WAAW;AACb,QAAI,YAAY;AAChB,QAAI,SAAS,GAAG,GAAG,OAAO,MAAM;AAAA,EAAA;AAGlC,MAAI,cAAc;AAClB,MAAI,YAAY;AAChB,MAAI,YAAY,WAAW;AACvB,MAAA,WAAW,IAAI,YAAY,GAAG,IAAI,YAAY,GAAG,QAAQ,WAAW,SAAS,SAAS;AACtF,MAAA,YAAY,EAAE;AACpB;AAGA,MAAM,uBAAuB,CAC3B,KACA,OACA,WACA,YACA,OACA,OACA,MACA,OACA,YAAoB,GACpB,cAAwB,CAAA,GACxB,cACG;AACH,QAAM,EAAE,KAAK,MAAM,QAAQ,MAAU,IAAA;AACrC,MAAI,QAAQ,MAAM,SAAS,MAAM,WAAW,MAAM,UAAU,IAAI;AAC9D;AAAA,EAAA;AAGI,QAAA,UAAU,qBAAqB,OAAO,EAAE,GAAG,KAAK,GAAG,MAAM;AACzD,QAAA,cAAc,qBAAqB,OAAO,EAAE,GAAG,QAAQ,GAAG,OAAO;AAEjE,QAAA,KAAK,QAAQ,OAAO;AACpB,QAAA,KAAK,QAAQ,MAAM;AACnB,QAAA,KAAK,YAAY,QAAQ;AACzB,QAAA,KAAK,YAAY,SAAS;AAGhC,MAAI,KAAK,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,OAAO;AAChD;AAAA,EAAA;AAGO,WAAA,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,WAAW,aAAa,SAAS;AAClF;AAEO,MAAM,mBAA8B,CAAC,EAAE,OAAO,CAAA,QAAS;AAC5D,QAAM,EAAE,MAAA,IAAU,WAAW,OAAO;AAC9B,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,QAAQ,cAAc;AACtB,QAAA,YAAY,OAA0B,IAAI;AAC1C,QAAA,WAAW,OAAe,CAAC;AAC3B,QAAA,WAAW,OAAO,KAAK;AAC7B,WAAS,UAAU;AAEb,QAAA,aAAa,YAAY,MAAM;AACnC,QAAI,CAAC,SAAS,CAAC,WAAW,WAAW,CAAC,UAAU,SAAS;AACvD;AAAA,IAAA;AAGF,UAAM,SAAS,UAAU;AACnB,UAAA,MAAM,OAAO,WAAW,IAAI;AAClC,QAAI,CAAC,KAAK;AACR;AAAA,IAAA;AAGF,UAAM,YAAY,WAAW;AACvB,UAAA,MAAM,OAAO,oBAAoB;AACvC,UAAM,IAAI,UAAU;AACpB,UAAM,IAAI,UAAU;AAGpB,QAAI,OAAO,UAAU,IAAI,OAAO,OAAO,WAAW,IAAI,KAAK;AAClD,aAAA,MAAM,QAAQ,GAAG,CAAC;AAClB,aAAA,MAAM,SAAS,GAAG,CAAC;AAC1B,aAAO,QAAQ,IAAI;AACnB,aAAO,SAAS,IAAI;AAAA,IAAA;AAEtB,QAAI,aAAa,KAAK,GAAG,GAAG,KAAK,GAAG,CAAC;AACrC,QAAI,UAAU,GAAG,GAAG,GAAG,CAAC;AAElB,UAAA,EAAE,SAAS;AACjB,UAAM,YAAY,UAAU;AAC5B,UAAM,aAAa,UAAU;AAC7B,UAAM,UAAU,MAAM;AACtB,UAAM,UAAU,MAAM;AAGtB,QAAI,KAAK;AACT,QAAI,UAAU;AACd,QAAI,KAAK,SAAS,SAAS,IAAI,SAAS,IAAI,OAAO;AACnD,QAAI,KAAK;AAGH,UAAA,gBAAgB,WAAW,aAAa;AACzB,yBAAA,KAAK,OAAO,WAAW,YAAY,GAAG,GAAG,eAAe,gBAAgB,GAAG,CAAA,GAAI,cAAc;AAGlH,QAAI,oBAAoB;AACtB,YAAM,WAAW,IAAI,SAAS,SAAS,SAAS,kBAAkB;AAClE,2BAAqB,KAAK,OAAO,WAAW,YAAY,GAAG,GAAG,SAAS,WAAW,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,IAAA;AAI7G;AACQ,YAAA,EAAE,GAAG,EAAA,IAAM;AACb,UAAA,MAAM,MAAM,MAAM,IAAI;AACxB,cAAM,MAAM,qBAAqB,OAAO,EAAE,GAAG,GAAG;AAC1C,cAAA,KAAK,IAAI,OAAO;AAChB,cAAA,KAAK,IAAI,MAAM;AACZ,iBAAA,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,QAAQ,eAAe,GAAG,CAAA,CAAE;AAAA,MAAA;AAAA,IACnE;AAIF,UAAM,EAAE,gBAAgB,aAAa,QAAY,IAAA;AAC7C,QAAA,MAAM,YAAY,gBAAgB;AAC9B,YAAA,cAAc,WAAW,WAAW;AACpC,YAAA,QAAQ,UAAU,gBAAgB;AAClC,YAAA,cAAc,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,2BAAA,KAAK,OAAO,WAAW,YAAY,GAAG,GAAG,aAAa,OAAO,KAAK,WAAW;AAAA,IAAA;AAI7F,WAAA,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM;AACzC,YAAM,UAAU,cAAc,IAAI,cAAc,MAAM;AAClD,UAAA;AACI,cAAA,UAAU,MAAM,YAAY,GAAG;AACrC,6BAAqB,KAAK,OAAO,WAAW,YAAY,GAAG,GAAG,SAAS,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,eAClF,GAAG;AAAA,MAAA;AAAA,IAEZ,CACD;AAGa,kBAAA,QAAQ,CAAC,SAAS,UAAU;AACxC,YAAM,EAAE,GAAG,MAAM,IAAI,OAAO;AAC5B,YAAM,MAAM,qBAAqB,OAAO,EAAE,GAAG,GAAG;AAC1C,YAAA,KAAK,IAAI,OAAO;AAChB,YAAA,KAAK,IAAI,MAAM;AAGjB,UAAA,KAAK,IAAI,QAAQ,KAAK,KAAK,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK,GAAG;AACjE;AAAA,MAAA;AAGF,YAAM,iBAAiB,UAAU;AACjC;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,iBAAiB,wBAAwB;AAAA,QACzC,iBAAiB,IAAI;AAAA,QACrB,CAAC;AAAA,QACD;AAAA,MACF;AAAA,IAAA,CACD;AAGD,QAAI,QAAQ;AAGZ,UAAM,eAAe,cAAc,IAAI,KAAK,cAAc;AACpD,UAAA,UAAU,MAAM,WAAW;AAC3B,UAAA,UAAU,MAAM,WAAW;AAGjC,aAAS,IAAI,GAAG,KAAK,SAAS,KAAK;AACjC,UAAI,QAAuB;AACvB,UAAA,QAAQ,EAAE,OAAO,cAAc,QAAQ,KAAK,cAAc,QAAQ,CAAC,GAAG;AAChE,gBAAA,qBAAqB,aAAa,cAAc,aAAa;AAAA,MAAA;AAEnE,UAAA,SAAS,MAAM,GAAG;AACpB,gBAAQ,aAAa;AAAA,MAAA;AAEvB,UAAI,CAAC,OAAO;AACV;AAAA,MAAA;AAGF,YAAM,MAAM,qBAAqB,OAAO,EAAE,GAAG,GAAG,GAAG;AAC7C,YAAA,OAAO,IAAI,OAAO;AACxB,UAAI,OAAO,IAAI,QAAQ,WAAW,OAAO,GAAG;AAC1C;AAAA,MAAA;AAEF,eAAS,KAAK,MAAM,GAAG,IAAI,OAAO,SAAS,KAAK;AAAA,IAAA;AAIlD,aAAS,IAAI,GAAG,KAAK,SAAS,KAAK;AACjC,UAAI,QAAuB;AACvB,UAAA,QAAQ,EAAE,OAAO,cAAc,QAAQ,KAAK,cAAc,QAAQ,CAAC,GAAG;AAChE,gBAAA,sBAAsB,aAAa,cAAc,aAAa;AAAA,MAAA;AAEpE,UAAA,SAAS,MAAM,GAAG;AACpB,gBAAQ,aAAa;AAAA,MAAA;AAEvB,UAAI,CAAC,OAAO;AACV;AAAA,MAAA;AAGF,YAAM,MAAM,qBAAqB,OAAO,EAAE,GAAG,GAAG,GAAG;AAC7C,YAAA,MAAM,IAAI,MAAM;AACtB,UAAI,MAAM,IAAI,SAAS,WAAW,MAAM,GAAG;AACzC;AAAA,MAAA;AAEF,eAAS,KAAK,GAAG,KAAK,SAAS,IAAI,QAAQ,KAAK;AAAA,IAAA;AAAA,EAClD,GACC;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAGK,QAAA,qBAAqB,YAAY,MAAM;AAC3C,yBAAqB,SAAS,OAAO;AAC5B,aAAA,UAAU,sBAAsB,UAAU;AAAA,EAAA,GAClD,CAAC,UAAU,CAAC;AAGT,QAAA,eAAe,YAAY,MAAM;AAC1B,eAAA;AAAA,EAAA,GACV,CAAC,UAAU,CAAC;AAEf,YAAU,MAAM;AACK,uBAAA;AACZ,WAAA,MAAM,qBAAqB,SAAS,OAAO;AAAA,EAAA,GACjD,CAAC,kBAAkB,CAAC;AAEvB,YAAU,MAAM;AACd,UAAM,YAAY,WAAW;AAC7B,QAAI,CAAC,WAAW;AACd;AAAA,IAAA;AAEQ,cAAA,iBAAiB,UAAU,YAAY;AACjD,WAAO,MAAM;AACD,gBAAA,oBAAoB,UAAU,YAAY;AAAA,IACtD;AAAA,EAAA,GACC,CAAC,YAAY,YAAY,CAAC;AAG3B,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,eAAe;AAAA,QACf,QAAQ;AAAA,MACV;AAAA,MAEA,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,UACL,WAAU;AAAA,UACV,OAAO;AAAA,YACL,eAAe;AAAA,YACf,SAAS;AAAA,UAAA;AAAA,QACX;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;ACvUO,MAAM,UAAU,MAAM;;AAC3B,QAAM,CAAC,SAAS,UAAU,IAAI,SAAyB,CAAA,CAAE;AACzD,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AACxC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,QAAQ,cAAc;AAE5B,QAAM,CAAC,aAAa,cAAc,IAAI,SAAgC,IAAI;AAEpE,QAAA,kBAAkB,YAAY,CAAC,MAAwB;AAC3D,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAAA,EACpB,GAAG,EAAE;AAEL,QAAM,eAAe;AAAA,IACnB,CAAC,MAAqC;AACpC,UAAI,OAAO;AACT,uBAAe,WAAW,OAAO,EAAE,aAAa,CAAC;AAAA,MAAA;AAAA,IAErD;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEM,QAAA,uBAAuB,YAAY,MAAM;AAC7C,QAAI,CAAC,OAAO;AACV;AAAA,IAAA;AAEF,aAAS,OAAO,EAAE,GAAG,IAAI,GAAG,GAAA,CAAI,CAAC;AACjC,0BAAsB,MAAM;AAC1B,eAAS,OAAO,EAAE,GAAG,GAAG,GAAG,EAAA,CAAG,CAAC;AAC/B;AAAA,QACE,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,MAAM,MAAM,WAAW;AAAA,UACvB,MAAM,MAAM,WAAW;AAAA,QACxB,CAAA;AAAA,MACH;AAAA,IAAA,CACD;AAAA,EAAA,GACA,CAAC,aAAa,CAAC;AAElB,YAAU,MAAM;AACd,QAAI,CAAC,OAAO;AACV;AAAA,IAAA;AAEF,UAAM,iBAAiB,kBAAkB,UAAU,WAAW,GAAG;AACjE,QAAI,CAAC,gBAAgB;AACnB,iBAAW,CAAA,CAAE;AACP,YAAA,KAAK,qBAAqB,CAAC;AACjC;AAAA,IAAA;AAEF,UAAMC,WAA0B,CAAC;AACjC,UAAM,qBAA8D,CAAC;AACrE,UAAM,QAAQ,IAAI,MAAM,UAAU,UAAU,CAAC,CAAC;AAC9C,UAAM,SAAS;AAEf,QAAI,IAAI;AACG,eAAA,SAAS,MAAM,QAAQ;AAChC,UAAI,MAAM,SAAS,SAAS,MAAM,SAAS,SAAS;AAClD,cAAM,gBAAgB,qBAAqB,MAAM,UAAA,CAAW;AACtD,cAAA,gBAAgB,cAAc,QAAQ,GAAG;AAC/C,YAAI,kBAAkB,IAAI;AACxB,gBAAM,YAAY,cAAc,UAAU,GAAG,aAAa;AAC1D,gBAAM,MAAM,cAAc,UAAU,gBAAgB,CAAC;AAC/C,gBAAA,WAAW,eAAe,SAAS;AACnC,gBAAA,WAAW,IAAI,YAAY;AAC7B,cAAA,mBAAmB,QAAQ,KAAK,MAAM;AACrB,+BAAA,QAAQ,IAAI,CAAC;AAAA,UAAA;AAElC,cAAI,mBAAmB,QAAQ,EAAE,QAAQ,KAAK,MAAM;AAC/B,+BAAA,QAAQ,EAAE,QAAQ,IAAI;AAAA,UAAA;AAAA,QAC3C,OACK;AACC,gBAAA,WAAW,cAAc,YAAY;AACvCA,cAAAA,SAAQ,QAAQ,KAAK,MAAM;AAC7BA,qBAAQ,QAAQ,IAAI;AAAA,UAAA;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAEF,eAAWA,QAAO;AAClB,UAAM,KAAK,qBAAqB;AAAA,EAAA,GAC/B,CAAC,MAAM,WAAW,MAAM,gBAAgB,aAAa,CAAC;AAEzD,YAAU,MAAM;AACd,QAAI,CAAC,OAAO;AACV;AAAA,IAAA;AAEI,UAAA,KAAK,kBAAkB,IAAI,QAAQ;AAAA,EAAA,GACxC,CAAC,QAAQ,CAAC;AAEb,YAAU,MAAM;AACd,QAAI,CAAC,OAAO;AACV;AAAA,IAAA;AAEF,mBAAe,WAAW,OAAO,WAAW,OAAO,CAAC;AAAA,EACtD,GAAG,CAAC,WAAW,SAAS,gBAAe,aAAQ,YAAR,mBAAiB,eAAc,aAAQ,YAAR,mBAAiB,WAAW,CAAC;AAEnG,QAAM,aAA6B;AAAA,IACjC,GAAG;AAAA,IACH,GAAI,QAAQ,MAAM,KAAK,mBAAmB,MAAM,SAAS,IAAI,CAAA;AAAA,EAC/D;AAEA,MAAI,CAAC,SAAS,CAAC,MAAM,KAAK,OAAO;AACxB,WAAA;AAAA,EAAA;AAGT,SAEI,oBAAA,UAAA,EAAA,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO,eAAe,KAAK,SAAY;AAAA,QACvC,QAAQ,gBAAgB,KAAK,SAAY;AAAA,MAC3C;AAAA,MACA,KAAK;AAAA,MACL,aAAa;AAAA,MACb,UAAU;AAAA,MAEV,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,UACX,OAAO;AAAA,YACL,OAAO,MAAM,aAAa;AAAA,YAC1B,QAAQ,MAAM,cAAc;AAAA,UAC9B;AAAA,UAEA,UAAA;AAAA,YAAC,oBAAA,kBAAA,EAAiB,MAAM,WAAY,CAAA;AAAA,YACpC,qBAAC,SAAM,EAAA,WAAW,YAChB,UAAA;AAAA,cAAA,oBAAC,SAAM,EAAA,WAAU,YAAW,OAAO,EAAE,QAAQ,MAAM,aACjD,GAAA,UAAA,qBAAC,MAAG,EAAA,WAAU,UACZ,UAAA;AAAA,gBAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,UAAU,UAAU,OAAO,MAAM,aAAa,QAAQ,MAAM,aAAa;AAAA,oBAClF,SAAS;AAAA,oBAET,UAAA,oBAAC,OAAI,EAAA,WAAU,eACb,UAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAW,uBAAuB,qBAAqB,cAAc;AAAA,wBACrE,OAAO,EAAE,UAAU,WAAW;AAAA,wBAC9B,YAAY,sBAAsB,IAAI;AAAA,wBACtC,UAAU,qBAAqB,IAAI;AAAA,sBAAA;AAAA,oBAAA,EAEvC,CAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,gBACA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,SAAO,gDAAa,aAAb,mBAAuB,SAAQ,EAAE;AAAA,kBAAA;AAAA,gBAClD;AAAA,iBACA,sDAAa,OAAb,mBAAiB,QAAjB,4BAAuB,CAAC,MAAO,oBAAA,eAAA,EAAc,KAAW,CAAG;AAAA,gBAC5D;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,QAAO,gDAAa,aAAb,mBAAuB,MAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC9C,EAAA,CACH,EACF,CAAA;AAAA,kCAEC,SAAM,EAAA,WAAU,0BACf,UAAC,qBAAA,MAAA,EAAG,WAAU,UACZ,UAAA;AAAA,gBAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAW;AAAA,oBACX,OAAO,EAAE,UAAQ,gDAAa,aAAb,mBAAuB,QAAO,EAAE;AAAA,kBAAA;AAAA,gBAClD;AAAA,gBACD,oBAAC,MAAG,EAAA,WAAU,mCAAmC,CAAA;AAAA,iBAChD,gDAAa,OAAb,mBAAiB,IAAI,CAAC,0BAAO,MAAG,EAAA,WAAU,mCAAwC,GAAA,CAAG;AAAA,gBACtF,oBAAC,MAAG,EAAA,WAAW,0DAA2D,CAAA;AAAA,cAAA,EAAA,CAC5E,EACF,CAAA;AAAA,cAEA,oBAAC,WAAM,WAAU,sBACd,2DAAa,0BAAI,IAAI,CAAC,MAAM;;AAEzB,uBAAA,qBAAC,MAAW,EAAA,WAAU,UACpB,UAAA;AAAA,kBAAA,oBAAC,kBAAe,GAAM;AAAA,kBACtB,oBAAC,MAAG,EAAA,WAAU,iEAAiE,CAAA;AAAA,mBAC9EvC,MAAA,2CAAa,OAAb,gBAAAA,IAAiB,IAAI,CAAC,0BAAO,MAAa,EAAA,GAAM,EAAT,GAAA,CAAe;AAAA,kBACvD,oBAAC,MAAG,EAAA,WAAU,kEAAkE,CAAA;AAAA,gBAAA,EAAA,GAJzE,CAKT;AAAA,cAAA,GAGN,CAAA;AAAA,YAAA,EACF,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,GAEJ;AAEJ;AClNO,MAAM,gBAAgB;AACtB,MAAM,MAAM;ACAZ,MAAM,aAAa,MAAM;AAC1B,MAAA,OAAO,WAAW,aAAa;AACjC;AAAA,EAAA;AAEF,QAAM,SAAS,SAAS,cAAc,sCAAsC,aAAa,IAAI;AAC7F,MAAI,QAAQ;AACV;AAAA,EAAA;AAEI,QAAA,QAAQ,SAAS,cAAc,OAAO;AACnC,WAAA,KAAK,YAAY,KAAK;AACzB,QAAA,aAAa,SAAS,YAAY;AACxC,QAAM,aAAa,oBAAoB,GAAG,aAAa,EAAE;AACzD,QAAM,YAAY;AACpB;ACDO,MAAM,aAAa,CAAC,EAAE,YAA6B;;AACxD,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AAC9C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AACjC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA,gBAAgB;AAAA,EAAA,IACd;AACJ,QAAM,QAAQ,SAAS;AACjB,QAAA,QAAQ,OAA8B,IAAI;AAEhD,QAAM,UAAU,SAAS,MAAM,KAAK,KAAK,IAAI,QAAQ;AACrD,QAAM,OAAO,+BAAO,eAAe,UAAU;AAC7C,YAAU,MAAM;;AACd,QAAI,CAAC,OAAO;AACV;AAAA,IAAA;AAEF,QAAI,UAAQA,MAAA,MAAM,eAAe,UAAU,QAAQ,MAAvC,gBAAAA,IAA0C,UAAS;AAE/D,YAAQ,MAAM,UAAU,EAAE,OAAO,UAAU,MAAM,EAAE,GAAG,MAAM,MAAA,GAAS,eAAe,OAAO;AAC3F,mBAAe,QAAS,QAAQ;AAChC,cAAU,KAAe;AAAA,EAAA,GACxB,CAAC,SAAS,KAAK,CAAC;AAEnB,QAAM,YAAY;AAAA,IAChB,CAAC,UAAkB;AACjB,UAAI,WAAW,OAAO;AACpB,iBAAS,MAAM,EAAE,MAAM,CAAC,CAAC;AAAA,MAAA;AAElB,eAAA,kBAAkB,EAAE,CAAC;AAC9B,gBAAU,QAAS,MAAM;AAAA,IAC3B;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,YAAU,MAAM;AACd,UAAM,WAAW,IAAI,eAAe,CAAC,YAAY;AAC/C,cAAQ,QAAQ,YAAY;AAAA,IAAA,CAC7B;AACD,QAAI,eAAe,SAAS;AACjB,eAAA,QAAQ,eAAe,OAAO;AAAA,IAAA;AAEzC,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,EAAE;AAEL,QAAM,aAAa,eAAe;AAE5B,QAAA,cAAc,YAAY,CAAC,MAA0C;AACzE,aAAS,aAAa,EAAE,cAAc,KAAK,CAAC;AAAA,EAC9C,GAAG,EAAE;AAEC,QAAA,eAAe,YAAY,MAAM;AACrC,QAAI,CAAC,MAAM,WAAW,CAAC,eAAe,SAAS;AAC7C;AAAA,IAAA;AAEF,UAAM,QAAQ,MAAM,SAAS,GAAG,eAAe,QAAQ,YAAY;AAC7D,UAAA,QAAQ,aAAa,eAAe,QAAQ;AAC5C,UAAA,QAAQ,YAAY,eAAe,QAAQ;AAAA,EACnD,GAAG,EAAE;AAEL,QAAM,cAAc;AAAA,IAClB,CAAC,MAA6C;AACxC,UAAA,CAAC,cAAc,CAAC,OAAO;AACzB;AAAA,MAAA;AAEO,eAAA,kBAAkB,OAAO,CAAC;AAC7B,YAAA,KAAK,cAAc,EAAE;AAAA,IAC7B;AAAA,IACA,CAAC,YAAY,SAAS,KAAK;AAAA,EAC7B;AAEA,QAAM,aAAa;AAAA,IACjB,CAAC,MAA6C;AAC5C,UAAI,EAAE,cAAc,MAAO,WAAW,GAAG,GAAG;AACnC,eAAA;AAAA,MAAA,OACF;AACL,YAAI,aAAa;AACL,oBAAA,EAAE,cAAc,KAAK;AAAA,QAAA;AAAA,MACjC;AAAA,IAEJ;AAAA,IACA,CAAC,aAAa,SAAS;AAAA,EACzB;AAEA,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAAgD;AAC3C,UAAA,EAAE,WAAW,CAAC,OAAO;AAChB,eAAA;AAAA,MAAA;AAET,YAAM,QAAQ,EAAE;AAEhB,cAAQ,EAAE,KAAK;AAAA,QACb,KAAK,SAAS;AACZ,cAAI,EAAE,QAAQ;AACZ,+BAAmB,OAAO,IAAI;AAAA,UAAA,OACzB;AACL,sBAAU,MAAM,KAAK;AACZ,qBAAA,aAAa,EAAE,CAAC;AACzB;AAAA,cACE,KAAK;AAAA,gBACH,SAAS,MAAM,WAAW;AAAA,gBAC1B,SAAS,MAAM,WAAW;AAAA,gBAC1B,QAAQ;AAAA,gBACR,QAAQ;AAAA,cACT,CAAA;AAAA,YACH;AACA,cAAE,eAAe;AACV,mBAAA;AAAA,UAAA;AAET;AAAA,QAAA;AAAA,QAEF,KAAK,UAAU;AACb,gBAAM,QAAQ;AACL,mBAAA,aAAa,MAAM,CAAC;AACpB,mBAAA,kBAAkB,EAAE,CAAC;AAC9B,YAAE,eAAe;AACjB,oBAAU,QAAS,MAAM;AAEzB;AAAA,QAAA;AAAA,QAEF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AACnB,mBAAA;AAAA,UAAA;AAAA,QAEX,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AACnB,mBAAA;AAAA,UAAA;AAET;AAAA,QACF,KAAK;AACC,cAAA,EAAE,WAAW,EAAE,SAAS;AACnB,mBAAA;AAAA,UAAA;AAET;AAAA,MAAA;AAGJ,YAAMwC,QAAO,MAAM,eAAe,UAAU,QAAQ;AACpD,UAAI5C,aAAwB4C,+BAAM,YAAY3C,KAAgB,GAAG;AAC/D,gBAAQ,KAAK,sCAAsC;AACnD,UAAE,eAAe;AAAA,MAAA;AAEN,mBAAA;AACN,aAAA;AAAA,IACT;AAAA,IACA,CAAC,OAAO,UAAU,QAAQ,WAAW,YAAY;AAAA,EACnD;AAEA,QAAM,QAA6B,QAAQ,CAAK,IAAA,EAAE,YAAY,SAAS;AACvE,MAAI,CAAC,OAAO;AACV,WACG,qBAAA,SAAA,EAAM,WAAU,4BAA2B,OAC1C,UAAA;AAAA,MAAC,oBAAA,OAAA,EAAI,WAAU,uBAAuB,CAAA;AAAA,MACrC,oBAAA,OAAA,EAAI,WAAU,SAAQ,UAAE,MAAA;AAAA,0BACxB,OAAI,EAAA,WAAU,+BACb,UAAA,oBAAC,cAAS,EACZ,CAAA;AAAA,IAAA,GACF;AAAA,EAAA;AAGJ,8BACG,SAAM,EAAA,WAAU,kBAAiB,iBAAe,MAAM,SAAS,OAC9D,UAAA;AAAA,IAAA,oBAAC,cAAa,EAAA,OAAO,EAAE,UAAU,YAAY,MAAM,GAAG,KAAK,GAAG,QAAQ,EAAE,GAAG,UAAU,IAAI;AAAA,IACxF,oBAAA,OAAA,EAAI,WAAU,wBAAwB,UAAQ,SAAA;AAAA,IAC9C,oBAAA,OAAA,EAAI,WAAU,SAAQ,UAAE,MAAA;AAAA,IACzB,qBAAC,OAAI,EAAA,WAAU,+BACb,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,YACL,SAAQ,oBAAe,YAAf,mBAAwB;AAAA,YAChC,OAAO;AAAA,UACT;AAAA,UAEC,WAAM,6BAAA,kBAAiB,YAAY,YAAY,SAAS;AAAA,QAAA;AAAA,MAC3D;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,iBAAe,MAAM;AAAA,UACrB,aAAU;AAAA,UACV,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS;AAAA,UACT,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SAAS;AAAA,UACT,UAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IACX,EACH,CAAA;AAAA,EAAA,GACF;AAEJ;ACtMO,MAAM,OAAO,CAAC,EAAE,OAAO,OAAO,IAAI,eAA0B;AAE/D,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAa;AAAA,MACb,eAAc;AAAA,MACd,gBAAe;AAAA,MACf;AAAA,MACA,WAAU;AAAA,MAET;AAAA,IAAA;AAAA,EACH;AAEJ;AC5Ba,MAAA,aAAa,CAAC,EAAE,OAAO,QAAQ,QAAQ,OAAO,SAAoB;AAE3E,SAAA,qBAAC,MAAK,EAAA,OAAc,MAClB,UAAA;AAAA,IAAA,oBAAC,UAAK,QAAO,QAAO,GAAE,iBAAgB,MAAM,OAAO;AAAA,IAClD,oBAAA,QAAA,EAAK,GAAE,8CAA6C,MAAM,OAAO;AAAA,IACjE,oBAAA,QAAA,EAAK,GAAE,gBAAe,MAAM,MAAO,CAAA;AAAA,EAAA,GACtC;AAEJ;ACRa,MAAA,YAAY,CAAC,EAAE,OAAO,QAAQ,QAAQ,OAAO,SAAoB;AAE1E,SAAA,qBAAC,MAAK,EAAA,OAAc,MAClB,UAAA;AAAA,IAAA,oBAAC,UAAK,QAAO,QAAO,GAAE,iBAAgB,MAAM,OAAO;AAAA,IAClD,oBAAA,QAAA,EAAK,GAAE,gBAAe,MAAM,OAAO;AAAA,IACnC,oBAAA,QAAA,EAAK,GAAE,cAAa,MAAM,MAAO,CAAA;AAAA,EAAA,GACpC;AAEJ;ACFO,MAAM,YAAY,MAAM;AAC7B,QAAM,EAAE,OAAO,aAAa,WAAW,OAAO;AACxC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EAAA,IACb;AACJ,QAAM,QAAQ,SAAS;AAEjB,QAAA,eAAe,cAAc,iBAAiB;AACpD,YAAU,MAAM;AACV,QAAA,CAAC,gBAAgB,CAAC,OAAO;AAC3B;AAAA,IAAA;AAEI,UAAA,QAAQ,IAAI,YAAY;AAC1B,QAAA,OAAO,UAAU,aAAa;AAChC;AAAA,IAAA;AAEU,gBAAA,OAAO,WAAW,SAAS,KAAK;AAAA,EAAA,GAC3C,CAAC,aAAa,mBAAmB,qBAAqB,OAAO,UAAU,CAAC;AAErE,QAAA,sBAAsB,YAAY,CAAC,MAAwB;AACzD,UAAA,QAAQ,EAAE,cAAc;AACvB,oCAAA,cAAa,WAAW,MAAM,MAAM;AAAA,EAC7C,GAAG,EAAE;AAEC,QAAA,oBAAoB,YAAY,MAAM;AACjC,aAAA,OAAO,CAAC,CAAC;AAAA,EACpB,GAAG,EAAE;AAEC,QAAA,eAAe,YAAY,CAAC,MAA8C;AAC9E,aAAS,eAAe,EAAE,cAAc,KAAK,CAAC;AAAA,EAChD,GAAG,EAAE;AAEL,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAAgD;AAC3C,UAAA,EAAE,QAAQ,UAAU;AACtB,cAAM,KAAK,uCAAW;AACtB,YAAI,IAAI;AACN,aAAG,MAAM;AAAA,QAAA;AAEF,iBAAA,eAAe,MAAS,CAAC;AAAA,MAAA;AAEpC,UAAI,EAAE,QAAQ,QAAQ,EAAE,WAAW,EAAE,UAAU;AAC7C,UAAE,eAAe;AACV,eAAA;AAAA,MAAA;AAEL,UAAA,EAAE,QAAQ,SAAS;AACrB,iBAAS,OAAO,EAAE,WAAW,KAAK,CAAC,CAAC;AACpC,UAAE,eAAe;AACV,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEM,QAAA,2BAA2B,YAAY,MAAM;AACxC,aAAA,uBAAuB,CAAC,mBAAmB,CAAC;AAAA,EAAA,GACpD,CAAC,mBAAmB,CAAC;AAElB,QAAA,mBAAmB,YAAY,MAAM;;AAChC,aAAA,eAAe,MAAS,CAAC;AAClC,oBAAU,YAAV,mBAAmB;AAAA,EAAM,GACxB,CAAC,SAAS,CAAC;AAEV,MAAA,OAAO,gBAAgB,aAAa;AAC/B,WAAA;AAAA,EAAA;AAEL,MAAA,QAAQ,YAAY,MAAM;AACrB,WAAA;AAAA,EAAA;AAGP,SAAA,qBAAC,WAAM,WAAW,iBAAiB,cAAc,SAAS,IAAI,oBAAoB,EAAE,IAClF,UAAA;AAAA,IAAA,qBAAC,OAAI,EAAA,WAAU,sBAAqB,SAAS,qBAC1C,UAAA;AAAA,MAAc,cAAA,WAAW,IAAI,IAAI,oBAAoB;AAAA,MAAE;AAAA,MAAI,cAAc;AAAA,IAAA,GAC5E;AAAA,IACC,oBAAA,OAAA,EAAI,WAAU,sBAAqB,SAAS,mBAC3C,UAAA,oBAAC,YAAW,EAAA,OAAO,EAAE,eAAe,UAAU,YAAY,MAAA,EAAS,CAAA,GACrE;AAAA,IACA,oBAAC,cAAS,KAAK,gBAAgB,OAAO,aAAa,UAAU,cAAc,WAAW,cAAe,CAAA;AAAA,IACrG,oBAAC,OAAI,EAAA,WAAW,2BACd,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAG,sBAAsB,+BAA+B,EAAE;AAAA,QACrE,SAAS;AAAA,QACV,UAAA;AAAA,MAAA;AAAA,IAAA,GAGH;AAAA,IACC,oBAAA,KAAA,EAAE,WAAU,mBAAkB,SAAS,kBACtC,UAAC,oBAAA,WAAA,EAAU,OAAO,EAAE,eAAe,YAAY,EACjD,CAAA;AAAA,EAAA,GACF;AAEJ;AC1Fa,MAAA,kBAAkB,MAAM,UAA4B;AACpD,MAAA,eAAe,MAAM,OAAyB,IAAI;AAExD,SAAS,UAAU;AAAA,EACxB;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,UAAU,CAAC;AAAA,EACX;AAAA,EACA;AAAA,EACA,KAAK;AACP,GAAU;;AACR,QAAM,EAAE,aAAa,iBAAiB,MAAM,OAAO,YAAY;AACzD,QAAA,UAAU,OAAuB,IAAI;AACrC,QAAA,UAAU,OAAuB,IAAI;AACrC,QAAA,iBAAiB,OAA4B,IAAI;AACjD,QAAA,YAAY,OAA4B,IAAI;AAC5C,QAAA,iBAAiB,OAA4B,IAAI;AACjD,QAAA,aAAa,OAAuB,IAAI;AAE9C,QAAM,oBAAoB,aAAa;AACvC,QAAM,YAAY,oBAAoB;AAEhC,QAAA,cAAc,OAAO,EAAE;AAC7B,QAAM,MAAM,cAAc;AACpB,QAAA,EAAE,SAAS;AAGX,QAAA,aAAa,OAAsB,IAAI;AACzC,MAAA,WAAW,YAAY,MAAM;AACpB,eAAA,UAAU,EAAE,KAAK;AAAA,EAAA;AAE9B,QAAM,UAAU,WAAW;AAGrB,QAAA,gBAAgB,OAAqB,IAAI;AAE/C,QAAM,CAAC,YAAY,IAAI,SAAoB,MAAM;;AAC/C,QAAI,CAAC,WAAW;AACd,kBAAY,QAAQ,OAAO;AACnB,cAAA,MAAM,6DAA6D,SAAS;AAAA,IAAA;AAEtF,UAAM,EAAE,YAAY,YAAY,YAAY,YAAY,qBAAqB;AACvE,UAAA,QAAQ,IAAI,MAAM;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IAAA,CACN;AACD,UAAM,UAAU;AACX,SAAA,eAAe,SAAS,IAAI;AAEjC,UAAM,WAAW,YAAY;AACxB,KAAAG,MAAA,KAAA,WAAA,gBAAAA,IAAA,WAAS,EAAE;AAEhB,UAAM,aAAa;AACnB,kBAAc,UAAU;AAExB,UAAMS,SAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,MACvB,WAAW;AAAA,MACX,eAAe,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,IAAI,MAAM,GAAG;AAAA,MAC1D,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,OAAO,EAAE;AAAA,MAC9C,UAAU;AAAA,MACV,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe,CAAC;AAAA,MAChB,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,MACrB,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,qBAAqB,EAAE,GAAG,IAAI,GAAG,GAAG;AAAA,MACpC,kBAAkB,oBAAoB;AAAA,MACtC,mBAAmB,CAAC,IAAI,IAAI,EAAE;AAAA,MAC9B,mBAAmB,CAAC,IAAI,IAAI,EAAE;AAAA,MAC9B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,MAAM;AAAA,IACR;AACOA,WAAAA;AAAAA,EAAA,CACR;AAIK,QAAA,CAAC,OAAO,QAAQ,IAAI;AAAA,IACxBgC;AAAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AAEA,YAAU,MAAM;AACH,eAAA;AAAA,EACb,GAAG,EAAE;AAEC,QAAA,CAAC,aAAa,cAAc,IAAI,UAAS,mCAAS,gBAAe,oBAAoB,YAAY,CAAC;AAClG,QAAA,CAAC,YAAY,aAAa,IAAI,UAAS,mCAAS,eAAc,mBAAmB,YAAY,CAAC;AACpG,YAAU,MAAM;AACR,UAAA,aAAa,OAAO,YAAY,MAAM;;AAC3B,uBAAAzC,MAAA,QAAQ,YAAR,gBAAAA,IAAiB,iBAAgB,CAAC;AACnC,sBAAAG,MAAA,QAAQ,YAAR,gBAAAA,IAAiB,gBAAe,CAAC;AAAA,OAC9C,GAAI;AACA,WAAA,MAAM,OAAO,cAAc,UAAU;AAAA,EAC9C,GAAG,EAAE;AACL,YAAU,MAAM;AACd,QAAI,QAAQ,aAAa;AACvB,qBAAe,QAAQ,WAAW;AAAA,IAAA;AAAA,EACpC,GACC,CAAC,QAAQ,WAAW,CAAC;AACxB,YAAU,MAAM;AACd,QAAI,QAAQ,YAAY;AACtB,oBAAc,QAAQ,UAAU;AAAA,IAAA;AAAA,EAClC,GACC,CAAC,QAAQ,UAAU,CAAC;AAGrB,SAAA,oBAAC,QAAQ,UAAR,EAAiB,OAAO,EAAE,OAAO,YAChC,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,YAAY,KAAK,QAAQ,mBAAmB,EAAE;AAAA,MACzD,KAAK;AAAA,MACL,mBAAiB;AAAA,MACjB,aAAW;AAAA,MAEX,UAAA;AAAA,QAAC,oBAAA,cAAA,EAAa,OAAO,EAAE,UAAU,SAAS,KAAK,GAAG,MAAM,EAAK,EAAA,CAAA;AAAA,4BAC5D,cAAa,EAAA,OAAO,EAAE,UAAU,YAAY,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,KAAK,YAAY,GAAG;AAAA,4BACpG,cAAa,EAAA,OAAO,EAAE,UAAU,YAAY,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,KAAK,UAAU,GAAG;AAAA,QAErG,OAAO,MAAM,gBAAgB,cAAc,kBAAkB,oBAAC,YAAW,EAAA,OAAO,KAAK,MAAO,CAAA,IAAK,oBAAC,WAAU,CAAA,CAAA;AAAA,QAC7G;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,WAAW,aAAa,EAAE;AAAA,YACrC,KAAK;AAAA,YACL,OAAO;AAAA;AAAA,cAEL,aAAW,WAAM,cAAc,YAApB,mBAA6B,eAAc,KAAK;AAAA,cAC3D,cAAY,WAAM,cAAc,YAApB,mBAA6B,gBAAe,KAAK;AAAA,cAC7D,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,GAAG;AAAA,YACL;AAAA,YAEA,UAAA;AAAA,cAAA,oBAAC,UAAO,MAAY;AAAA,kCACnB,SAAQ,EAAA;AAAA,cACT,oBAAC,eAAe,EAAA,GAAG,EAAE,GAAG,SAAS,aAAa,YAAY,WAAW,UAAA,GAAa;AAAA,kCACjF,aAAY,EAAA;AAAA,kCACZ,SAAQ,EAAA;AAAA,kCACR,SAAQ,CAAA,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACX;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEA,MAAM,sBAAsB,CAAC,iBAAqC;;AAC1D,QAAA,OAAO,qBAAqB,YAAY;AAC9C,MAAI,oBAAkB,kBAAa,CAAC,MAAd,mBAAiB,WAAU;AACjD,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,KAAK;AAC/B,UAAA,MAAM,IAAI,CAAC;AACjB,UAAM,WAAS,kDAAe,SAAf,mBAAqB,aAAU,kDAAc,YAAd,mBAAuB,WAAU;AAC3E,QAAA,kBAAkB,SAAS,cAAc;AACpC,aAAA;AAAA,IAAA;AAEU,uBAAA;AAAA,EAAA;AAErB,SAAO,kBAAkB;AAC3B;AAEA,MAAM,qBAAqB,CAAC,iBAAqC;;AACzD,QAAA,OAAO,qBAAqB,YAAY;AAC9C,MAAI,mBAAiB,kBAAa,CAAC,MAAd,mBAAiB,UAAS;AAC/C,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,KAAK;AAC/B,UAAA,MAAM,IAAI,CAAC;AACjB,UAAM,UAAQ,kDAAe,SAAf,mBAAqB,YAAS,kDAAc,YAAd,mBAAuB,UAAS;AACxE,QAAA,iBAAiB,QAAQ,aAAa;AACjC,aAAA;AAAA,IAAA;AAES,sBAAA;AAAA,EAAA;AAEpB,SAAO,iBAAiB;AAC1B;ACpNO,MAAM,iCAAoD;AAAA,EAC/D,OAAO,EAAE,OAAO,QAAa;AAC3B,QAAI,SAAS,QAAQ,MAAM,KAAK,GAAG;AAC1B,aAAA;AAAA,IAAA;AAEH,UAAA,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE,MAAM,GAAG;AAC/C,UAAM,SAAS,IAAI,QAAQ,4BAA4B,KAAK;AAC5D,QAAI,YAAY,MAAM;AACb,aAAA;AAAA,IAAA;AAEF,WAAA,GAAG,MAAM,IAAI,QAAQ;AAAA,EAAA;AAEhC;ACZO,MAAM,wBAAwB;AAAA,EACnC,KAAK,EAAE,OAAO,MAAM,OAAO,SAAoC;AAE3D,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS;AAAA,QACT,UAAU,CAAC,MAAM;AACf,cAAI,MAAM;AACH,iBAAA,MAAM,MAAM,EAAE,OAAO,OAAO,EAAE,cAAc,QAAQ,SAAA,EAAY,CAAA,CAAC;AAAA,UAAA;AAExE,YAAE,cAAc,KAAK;AAAA,QAAA;AAAA,MACvB;AAAA,IACF;AAAA,EAAA;AAGN;ACuCO,SAAS,WAAW,SAAuC;AAChE,QAAM,SAAwB,CAAC;AAE/B,QAAM,MAAM,QAAQ;AAEhB,MAAA,QAAQ,OAAO,KAAK;AACf,WAAA,YAAY,QAAQ,OAAO;AAAA,EAAA;AAGhC,MAAA,QAAQ,SAAS,KAAK;AACjB,WAAA,cAAc,QAAQ,SAAS;AAAA,EAAA;AAGpC,MAAA,QAAQ,UAAU,KAAK;AAClB,WAAA,eAAe,QAAQ,UAAU;AAAA,EAAA;AAGtC,MAAA,QAAQ,QAAQ,KAAK;AAChB,WAAA,aAAa,QAAQ,QAAQ;AAAA,EAAA;AAG/B,SAAA;AACT;","x_google_ignoreList":[7,26,27]}
|