@viji-dev/core 0.3.21 → 0.3.23
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/README.md +1439 -1439
- package/dist/artist-dts-p5.js +1 -1
- package/dist/artist-dts.js +1 -1
- package/dist/artist-global.d.ts +2 -1
- package/dist/assets/cv-tasks.worker.js +878 -878
- package/dist/assets/{viji.worker-bm-hvzXt.js → viji.worker-DTQvTudb.js} +82 -5
- package/dist/assets/viji.worker-DTQvTudb.js.map +1 -0
- package/dist/docs-api.d.ts +52 -0
- package/dist/docs-api.js +1231 -0
- package/dist/{essentia-wasm.web-C1URJxCY.js → essentia-wasm.web-0nilrUD3.js} +2 -2
- package/dist/{essentia-wasm.web-C1URJxCY.js.map → essentia-wasm.web-0nilrUD3.js.map} +1 -1
- package/dist/{index-trkn0FNW.js → index-Bu1euCdl.js} +3 -3
- package/dist/index-Bu1euCdl.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/shader-uniforms.js +5 -0
- package/package.json +91 -86
- package/dist/assets/viji.worker-bm-hvzXt.js.map +0 -1
- package/dist/index-trkn0FNW.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viji.worker-DTQvTudb.js","sources":["../src/worker/ParameterSystem.ts","../src/worker/InteractionSystem.ts","../src/worker/CVSystem.ts","../src/worker/VideoSystem.ts","../src/worker/renderers/P5WorkerAdapter.ts","../src/worker/renderers/ShaderParameterParser.ts","../src/worker/renderers/ShaderWorkerAdapter.ts","../src/worker/VijiWorkerRuntime.ts","../src/utils/SceneAnalyzer.ts","../node_modules/sucrase/dist/esm/parser/tokenizer/keywords.js","../node_modules/sucrase/dist/esm/parser/tokenizer/types.js","../node_modules/sucrase/dist/esm/parser/tokenizer/state.js","../node_modules/sucrase/dist/esm/parser/util/charcodes.js","../node_modules/sucrase/dist/esm/parser/traverser/base.js","../node_modules/sucrase/dist/esm/parser/traverser/util.js","../node_modules/sucrase/dist/esm/parser/util/whitespace.js","../node_modules/sucrase/dist/esm/parser/util/identifier.js","../node_modules/sucrase/dist/esm/parser/tokenizer/readWordTree.js","../node_modules/sucrase/dist/esm/parser/tokenizer/readWord.js","../node_modules/sucrase/dist/esm/parser/tokenizer/index.js","../node_modules/sucrase/dist/esm/util/getImportExportSpecifierInfo.js","../node_modules/sucrase/dist/esm/parser/plugins/jsx/xhtml.js","../node_modules/sucrase/dist/esm/util/getJSXPragmaInfo.js","../node_modules/sucrase/dist/esm/transformers/Transformer.js","../node_modules/sucrase/dist/esm/transformers/JSXTransformer.js","../node_modules/sucrase/dist/esm/util/getNonTypeIdentifiers.js","../node_modules/sucrase/dist/esm/CJSImportProcessor.js","../node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs","../node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js","../node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs","../node_modules/sucrase/dist/esm/computeSourceMap.js","../node_modules/sucrase/dist/esm/HelperManager.js","../node_modules/sucrase/dist/esm/identifyShadowedGlobals.js","../node_modules/sucrase/dist/esm/util/getIdentifierNames.js","../node_modules/sucrase/dist/esm/NameManager.js","../node_modules/ts-interface-checker/dist/util.js","../node_modules/ts-interface-checker/dist/types.js","../node_modules/ts-interface-checker/dist/index.js","../node_modules/sucrase/dist/esm/Options-gen-types.js","../node_modules/sucrase/dist/esm/Options.js","../node_modules/sucrase/dist/esm/parser/traverser/lval.js","../node_modules/sucrase/dist/esm/parser/plugins/typescript.js","../node_modules/sucrase/dist/esm/parser/plugins/jsx/index.js","../node_modules/sucrase/dist/esm/parser/plugins/types.js","../node_modules/sucrase/dist/esm/parser/traverser/expression.js","../node_modules/sucrase/dist/esm/parser/plugins/flow.js","../node_modules/sucrase/dist/esm/parser/traverser/statement.js","../node_modules/sucrase/dist/esm/parser/traverser/index.js","../node_modules/sucrase/dist/esm/parser/index.js","../node_modules/sucrase/dist/esm/util/isAsyncOperation.js","../node_modules/sucrase/dist/esm/TokenProcessor.js","../node_modules/sucrase/dist/esm/util/getClassInfo.js","../node_modules/sucrase/dist/esm/util/elideImportEquals.js","../node_modules/sucrase/dist/esm/util/getDeclarationInfo.js","../node_modules/sucrase/dist/esm/util/isExportFrom.js","../node_modules/sucrase/dist/esm/util/removeMaybeImportAttributes.js","../node_modules/sucrase/dist/esm/util/shouldElideDefaultExport.js","../node_modules/sucrase/dist/esm/transformers/CJSImportTransformer.js","../node_modules/sucrase/dist/esm/transformers/ESMImportTransformer.js","../node_modules/sucrase/dist/esm/transformers/FlowTransformer.js","../node_modules/sucrase/dist/esm/transformers/JestHoistTransformer.js","../node_modules/sucrase/dist/esm/transformers/NumericSeparatorTransformer.js","../node_modules/sucrase/dist/esm/transformers/OptionalCatchBindingTransformer.js","../node_modules/sucrase/dist/esm/transformers/OptionalChainingNullishTransformer.js","../node_modules/sucrase/dist/esm/transformers/ReactDisplayNameTransformer.js","../node_modules/sucrase/dist/esm/transformers/ReactHotLoaderTransformer.js","../node_modules/sucrase/dist/esm/util/isIdentifier.js","../node_modules/sucrase/dist/esm/transformers/TypeScriptTransformer.js","../node_modules/sucrase/dist/esm/transformers/RootTransformer.js","../node_modules/lines-and-columns/build/index.js","../node_modules/sucrase/dist/esm/util/getTSImportedNames.js","../node_modules/sucrase/dist/esm/index.js","../src/worker/viji.worker.ts"],"sourcesContent":["import { \r\n ParameterGroup, \r\n ParameterDefinition, \r\n ParameterValue,\r\n SliderParameter,\r\n ColorParameter,\r\n ToggleParameter,\r\n SelectParameter,\r\n TextParameter,\r\n NumberParameter,\r\n ImageParameter,\r\n SliderConfig,\r\n ColorConfig,\r\n ToggleConfig,\r\n SelectConfig,\r\n TextConfig,\r\n NumberConfig,\r\n ImageConfig\r\n} from '../types/index.js';\r\n\r\nexport class ParameterSystem {\r\n // Parameter system for Phase 2 (new object-based approach)\r\n private parameterDefinitions = new Map<string, ParameterDefinition>();\r\n private parameterGroups = new Map<string, ParameterGroup>();\r\n private parameterValues = new Map<string, ParameterValue>();\r\n private parameterObjects = new Map<string, any>(); // Maps parameter names to their objects\r\n private parametersDefined = false;\r\n private initialValuesSynced = false; // Track if initial values have been synced from host\r\n \r\n // Debug logging control\r\n private debugMode = false;\r\n\r\n /**\r\n * Enable or disable debug logging\r\n */\r\n setDebugMode(enabled: boolean): void {\r\n this.debugMode = enabled;\r\n }\r\n\r\n /**\r\n * Debug logging helper\r\n */\r\n private debugLog(message: string, ...args: any[]): void {\r\n if (this.debugMode) {\r\n console.log(message, ...args);\r\n }\r\n }\r\n\r\n // Message posting callback\r\n private postMessageCallback: (type: string, data?: any) => void;\r\n\r\n constructor(postMessageCallback: (type: string, data?: any) => void) {\r\n this.postMessageCallback = postMessageCallback;\r\n }\r\n\r\n // Parameter helper function implementations (return parameter objects)\r\n public createSliderParameter(defaultValue: number, config: SliderConfig): SliderParameter {\r\n const paramName = config.label;\r\n const sliderObject = {\r\n value: defaultValue,\r\n min: config.min ?? 0,\r\n max: config.max ?? 100,\r\n step: config.step ?? 1,\r\n label: config.label,\r\n description: config.description ?? '',\r\n group: config.group ?? 'general',\r\n category: config.category ?? 'general',\r\n };\r\n\r\n const definition: ParameterDefinition = {\r\n type: 'slider',\r\n defaultValue,\r\n label: sliderObject.label,\r\n description: sliderObject.description,\r\n group: sliderObject.group,\r\n category: sliderObject.category,\r\n config: {\r\n min: sliderObject.min,\r\n max: sliderObject.max,\r\n step: sliderObject.step\r\n }\r\n };\r\n\r\n this.storeParameterDefinition(paramName, definition);\r\n this.parameterObjects.set(paramName, sliderObject);\r\n return sliderObject;\r\n }\r\n\r\n public createColorParameter(defaultValue: string, config: ColorConfig): ColorParameter {\r\n const paramName = config.label;\r\n const colorObject = {\r\n value: defaultValue,\r\n label: config.label,\r\n description: config.description ?? '',\r\n group: config.group ?? 'general',\r\n category: config.category ?? 'general',\r\n };\r\n\r\n const definition: ParameterDefinition = {\r\n type: 'color',\r\n defaultValue,\r\n label: colorObject.label,\r\n description: colorObject.description,\r\n group: colorObject.group,\r\n category: colorObject.category,\r\n };\r\n\r\n this.storeParameterDefinition(paramName, definition);\r\n this.parameterObjects.set(paramName, colorObject);\r\n return colorObject;\r\n }\r\n\r\n public createToggleParameter(defaultValue: boolean, config: ToggleConfig): ToggleParameter {\r\n const paramName = config.label;\r\n const toggleObject = {\r\n value: defaultValue,\r\n label: config.label,\r\n description: config.description ?? '',\r\n group: config.group ?? 'general',\r\n category: config.category ?? 'general'\r\n };\r\n\r\n const definition: ParameterDefinition = {\r\n type: 'toggle',\r\n defaultValue,\r\n label: toggleObject.label,\r\n description: toggleObject.description,\r\n group: toggleObject.group,\r\n category: toggleObject.category\r\n };\r\n\r\n this.storeParameterDefinition(paramName, definition);\r\n this.parameterObjects.set(paramName, toggleObject);\r\n return toggleObject;\r\n }\r\n\r\n public createSelectParameter(defaultValue: string | number, config: SelectConfig): SelectParameter {\r\n const paramName = config.label;\r\n const selectObject = {\r\n value: defaultValue,\r\n options: config.options,\r\n label: config.label,\r\n description: config.description ?? '',\r\n group: config.group ?? 'general',\r\n category: config.category ?? 'general'\r\n };\r\n\r\n const definition: ParameterDefinition = {\r\n type: 'select',\r\n defaultValue,\r\n label: selectObject.label,\r\n description: selectObject.description,\r\n group: selectObject.group,\r\n category: selectObject.category,\r\n config: {\r\n options: selectObject.options\r\n }\r\n };\r\n\r\n this.storeParameterDefinition(paramName, definition);\r\n this.parameterObjects.set(paramName, selectObject);\r\n return selectObject;\r\n }\r\n\r\n public createTextParameter(defaultValue: string, config: TextConfig): TextParameter {\r\n const paramName = config.label;\r\n const textObject = {\r\n value: defaultValue,\r\n maxLength: config.maxLength ?? 1000,\r\n label: config.label,\r\n description: config.description ?? '',\r\n group: config.group ?? 'general',\r\n category: config.category ?? 'general'\r\n };\r\n\r\n const definition: ParameterDefinition = {\r\n type: 'text',\r\n defaultValue,\r\n label: textObject.label,\r\n description: textObject.description,\r\n group: textObject.group,\r\n category: textObject.category,\r\n config: {\r\n maxLength: textObject.maxLength\r\n }\r\n };\r\n\r\n this.storeParameterDefinition(paramName, definition);\r\n this.parameterObjects.set(paramName, textObject);\r\n return textObject;\r\n }\r\n\r\n public createNumberParameter(defaultValue: number, config: NumberConfig): NumberParameter {\r\n const paramName = config.label;\r\n const numberObject = {\r\n value: defaultValue,\r\n min: config.min ?? 0,\r\n max: config.max ?? 100,\r\n step: config.step ?? 1,\r\n label: config.label,\r\n description: config.description ?? '',\r\n group: config.group ?? 'general',\r\n category: config.category ?? 'general'\r\n };\r\n\r\n const definition: ParameterDefinition = {\r\n type: 'number',\r\n defaultValue,\r\n label: numberObject.label,\r\n description: numberObject.description,\r\n group: numberObject.group,\r\n category: numberObject.category,\r\n config: {\r\n min: numberObject.min,\r\n max: numberObject.max,\r\n step: numberObject.step\r\n }\r\n };\r\n\r\n this.storeParameterDefinition(paramName, definition);\r\n this.parameterObjects.set(paramName, numberObject);\r\n return numberObject;\r\n }\r\n\r\n public createImageParameter(defaultValue: null, config: ImageConfig): ImageParameter {\r\n const paramName = config.label;\r\n const imageObject = {\r\n value: defaultValue,\r\n label: config.label,\r\n description: config.description ?? '',\r\n group: config.group ?? 'general',\r\n category: config.category ?? 'general'\r\n };\r\n\r\n const definition: ParameterDefinition = {\r\n type: 'image',\r\n defaultValue,\r\n label: imageObject.label,\r\n description: imageObject.description,\r\n group: imageObject.group,\r\n category: imageObject.category\r\n };\r\n\r\n this.storeParameterDefinition(paramName, definition);\r\n this.parameterObjects.set(paramName, imageObject);\r\n return imageObject;\r\n }\r\n\r\n private storeParameterDefinition(name: string, definition: ParameterDefinition): void {\r\n // This is called during scene initialization, not during define()\r\n // We'll collect these and send them when the scene is fully loaded\r\n this.parameterDefinitions.set(name, definition);\r\n this.parameterValues.set(name, definition.defaultValue);\r\n }\r\n\r\n public updateParameterValue(name: string, value: ParameterValue): boolean {\r\n const definition = this.parameterDefinitions.get(name);\r\n if (!definition) {\r\n console.warn(`Unknown parameter: ${name}. Available parameters:`, Array.from(this.parameterDefinitions.keys()));\r\n return false;\r\n }\r\n\r\n // Validation\r\n if (!this.validateParameterValue(name, value, definition)) {\r\n console.warn(`Validation failed for parameter ${name} = ${value}`);\r\n return false;\r\n }\r\n\r\n // Check if value actually changed (but always allow initial sync)\r\n const currentValue = this.parameterValues.get(name);\r\n const isInitialSync = !this.initialValuesSynced; // During initial parameter sync from host\r\n \r\n if (currentValue === value && !isInitialSync) {\r\n return false; // No change (but allow initial sync even if values match)\r\n }\r\n\r\n // Update value in both storage and parameter object\r\n this.parameterValues.set(name, value);\r\n \r\n // Update the parameter object's value property\r\n const parameterObject = this.parameterObjects.get(name);\r\n if (parameterObject) {\r\n parameterObject.value = value;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n private validateParameterValue(name: string, value: ParameterValue, definition: ParameterDefinition): boolean {\r\n // Custom validation function\r\n if (definition.validate && !definition.validate(value)) {\r\n console.error(`Custom validation failed for parameter '${name}': ${value}`);\r\n return false;\r\n }\r\n\r\n // Type validation\r\n switch (definition.type) {\r\n case 'slider':\r\n case 'number':\r\n if (typeof value !== 'number' || isNaN(value)) {\r\n console.error(`Parameter '${name}' must be a number, got: ${value}`);\r\n return false;\r\n }\r\n if (definition.config?.min !== undefined && value < definition.config.min) {\r\n console.error(`Parameter '${name}' value ${value} is below minimum ${definition.config.min}`);\r\n return false;\r\n }\r\n if (definition.config?.max !== undefined && value > definition.config.max) {\r\n console.error(`Parameter '${name}' value ${value} is above maximum ${definition.config.max}`);\r\n return false;\r\n }\r\n break;\r\n case 'color':\r\n if (typeof value !== 'string' || !/^#[0-9A-Fa-f]{6}$/.test(value)) {\r\n console.error(`Parameter '${name}' must be a valid hex color, got: ${value}`);\r\n return false;\r\n }\r\n break;\r\n case 'toggle':\r\n if (typeof value !== 'boolean') {\r\n console.error(`Parameter '${name}' must be a boolean, got: ${value}`);\r\n return false;\r\n }\r\n break;\r\n case 'select':\r\n if (!definition.config?.options || !definition.config.options.includes(value as string & number)) {\r\n console.error(`Parameter '${name}' value ${value} is not in options: ${definition.config?.options}`);\r\n return false;\r\n }\r\n break;\r\n case 'text':\r\n if (typeof value !== 'string') {\r\n console.error(`Parameter '${name}' must be a string, got: ${value}`);\r\n return false;\r\n }\r\n if (definition.config?.maxLength && value.length > definition.config.maxLength) {\r\n console.error(`Parameter '${name}' text too long: ${value.length} > ${definition.config.maxLength}`);\r\n return false;\r\n }\r\n break;\r\n case 'image':\r\n // Image parameters can be null, ImageBitmap, or OffscreenCanvas\r\n if (value !== null && !(value instanceof ImageBitmap) && !(value instanceof OffscreenCanvas)) {\r\n console.error(`Parameter '${name}' must be null, ImageBitmap, or OffscreenCanvas, got: ${value}`);\r\n return false;\r\n }\r\n break;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Reset parameter state (called when loading new scene)\r\n public resetParameterState(): void {\r\n this.parametersDefined = false;\r\n this.initialValuesSynced = false;\r\n this.parameterDefinitions.clear();\r\n this.parameterGroups.clear();\r\n this.parameterValues.clear();\r\n this.parameterObjects.clear();\r\n }\r\n\r\n // Send all parameters (from helper functions) to host\r\n public sendAllParametersToHost(): void {\r\n // Don't send if already sent or if no parameters defined\r\n if (this.parametersDefined || this.parameterDefinitions.size === 0) {\r\n return;\r\n }\r\n\r\n try {\r\n // Group parameters by their group property\r\n const groups = new Map<string, ParameterGroup>();\r\n\r\n for (const [paramName, paramDef] of this.parameterDefinitions) {\r\n const groupName = paramDef.group || 'general';\r\n \r\n if (!groups.has(groupName)) {\r\n // Use the parameter's category if available, otherwise default to 'general'\r\n const category = paramDef.category || 'general';\r\n groups.set(groupName, {\r\n groupName,\r\n category,\r\n parameters: {}\r\n });\r\n }\r\n\r\n const group = groups.get(groupName)!;\r\n group.parameters[paramName] = paramDef;\r\n }\r\n\r\n this.parametersDefined = true;\r\n\r\n // Send parameter definitions to host for UI generation\r\n this.postMessageCallback('parameters-defined', {\r\n groups: Array.from(groups.values())\r\n });\r\n\r\n this.debugLog(`All parameters sent to host: ${this.parameterDefinitions.size} parameters in ${groups.size} groups`);\r\n } catch (error) {\r\n this.postMessageCallback('parameter-validation-error', {\r\n message: `Failed to send parameters to host: ${(error as Error).message}`,\r\n code: 'PARAMETER_SENDING_ERROR'\r\n });\r\n }\r\n }\r\n\r\n // Mark initial values as synced\r\n public markInitialValuesSynced(): void {\r\n this.initialValuesSynced = true;\r\n }\r\n\r\n // Get parameter count for performance reporting\r\n public getParameterCount(): number {\r\n return this.parameterDefinitions.size;\r\n }\r\n\r\n // Get all parameter objects (for P5 adapter to add .p5 properties)\r\n public getAllParameterObjects(): Map<string, any> {\r\n return this.parameterObjects;\r\n }\r\n} ","import { MouseAPI, KeyboardAPI, TouchAPI, TouchPoint } from '../types/index.js';\r\n\r\n/**\r\n * Manages user interaction state and APIs for the worker runtime.\r\n * Handles mouse, keyboard, and touch input processing for Phase 7.\r\n * \r\n * This system provides:\r\n * - Real-time interaction state management\r\n * - Frame-based event processing\r\n * - Clean API generation for artist code\r\n * - Message handling for interaction updates\r\n */\r\nexport class InteractionSystem {\r\n // Interaction enabled state\r\n private isEnabled: boolean = true;\r\n\r\n // Mouse interaction state\r\n private mouseState: MouseAPI = {\r\n x: 0, y: 0,\r\n isInCanvas: false,\r\n isPressed: false,\r\n leftButton: false,\r\n rightButton: false,\r\n middleButton: false,\r\n velocity: { x: 0, y: 0 },\r\n deltaX: 0,\r\n deltaY: 0,\r\n wheelDelta: 0,\r\n wheelX: 0,\r\n wheelY: 0,\r\n wasPressed: false,\r\n wasReleased: false,\r\n wasMoved: false\r\n };\r\n\r\n // Keyboard interaction state\r\n private keyboardState: KeyboardAPI = {\r\n isPressed: (key: string) => this.keyboardState.activeKeys.has(key.toLowerCase()),\r\n wasPressed: (key: string) => this.keyboardState.pressedThisFrame.has(key.toLowerCase()),\r\n wasReleased: (key: string) => this.keyboardState.releasedThisFrame.has(key.toLowerCase()),\r\n activeKeys: new Set<string>(),\r\n pressedThisFrame: new Set<string>(),\r\n releasedThisFrame: new Set<string>(),\r\n lastKeyPressed: '',\r\n lastKeyReleased: '',\r\n shift: false,\r\n ctrl: false,\r\n alt: false,\r\n meta: false\r\n };\r\n\r\n // Touch interaction state\r\n private touchState: TouchAPI = {\r\n points: [],\r\n count: 0,\r\n started: [],\r\n moved: [],\r\n ended: [],\r\n primary: null,\r\n gestures: {\r\n isPinching: false,\r\n isRotating: false,\r\n isPanning: false,\r\n isTapping: false,\r\n pinchScale: 1,\r\n pinchDelta: 0,\r\n rotationAngle: 0,\r\n rotationDelta: 0,\r\n panDelta: { x: 0, y: 0 },\r\n tapCount: 0,\r\n lastTapTime: 0,\r\n tapPosition: null\r\n }\r\n };\r\n\r\n constructor() {\r\n // Bind methods for proper context when used as callbacks\r\n this.handleMouseUpdate = this.handleMouseUpdate.bind(this);\r\n this.handleKeyboardUpdate = this.handleKeyboardUpdate.bind(this);\r\n this.handleTouchUpdate = this.handleTouchUpdate.bind(this);\r\n this.frameStart = this.frameStart.bind(this);\r\n }\r\n\r\n /**\r\n * Get the interaction APIs for inclusion in the viji object\r\n */\r\n public getInteractionAPIs() {\r\n return {\r\n mouse: this.mouseState,\r\n keyboard: this.keyboardState,\r\n touches: this.touchState\r\n };\r\n }\r\n\r\n /**\r\n * Called at the start of each frame to reset frame-based events\r\n */\r\n public frameStart(): void {\r\n // Reset mouse frame events\r\n this.mouseState.wasPressed = false;\r\n this.mouseState.wasReleased = false;\r\n this.mouseState.wasMoved = false;\r\n this.mouseState.wheelDelta = 0;\r\n this.mouseState.wheelX = 0;\r\n this.mouseState.wheelY = 0;\r\n\r\n // Reset keyboard frame events\r\n this.keyboardState.pressedThisFrame.clear();\r\n this.keyboardState.releasedThisFrame.clear();\r\n\r\n // Reset touch frame events\r\n this.touchState.started = [];\r\n this.touchState.moved = [];\r\n this.touchState.ended = [];\r\n this.touchState.gestures.isTapping = false;\r\n this.touchState.gestures.pinchDelta = 0;\r\n this.touchState.gestures.rotationDelta = 0;\r\n }\r\n\r\n /**\r\n * Handle mouse update messages from the host\r\n */\r\n public handleMouseUpdate(data: {\r\n x: number;\r\n y: number;\r\n buttons: number;\r\n deltaX: number;\r\n deltaY: number;\r\n wheelDeltaX: number;\r\n wheelDeltaY: number;\r\n isInCanvas?: boolean;\r\n timestamp: number;\r\n wasPressed?: boolean;\r\n wasReleased?: boolean;\r\n }): void {\r\n // Skip processing if interactions are disabled\r\n if (!this.isEnabled) return;\r\n // Update mouse position and button states\r\n this.mouseState.x = data.x;\r\n this.mouseState.y = data.y;\r\n this.mouseState.isInCanvas = data.isInCanvas !== undefined ? data.isInCanvas : true;\r\n this.mouseState.leftButton = (data.buttons & 1) !== 0;\r\n this.mouseState.rightButton = (data.buttons & 2) !== 0;\r\n this.mouseState.middleButton = (data.buttons & 4) !== 0;\r\n this.mouseState.isPressed = data.buttons > 0;\r\n \r\n // Mouse movement deltas - SET to latest event (continuous stream of events)\r\n this.mouseState.deltaX = data.deltaX || 0;\r\n this.mouseState.deltaY = data.deltaY || 0;\r\n \r\n // Wheel deltas - ACCUMULATE (discrete events, total scroll this frame)\r\n this.mouseState.wheelDelta += data.wheelDeltaY || 0;\r\n this.mouseState.wheelX += data.wheelDeltaX || 0;\r\n this.mouseState.wheelY += data.wheelDeltaY || 0;\r\n \r\n // Velocity matches movement delta\r\n this.mouseState.velocity.x = data.deltaX || 0;\r\n this.mouseState.velocity.y = data.deltaY || 0;\r\n \r\n // Frame-based events - use OR to persist if already set this frame\r\n this.mouseState.wasPressed = this.mouseState.wasPressed || (data.wasPressed || false);\r\n this.mouseState.wasReleased = this.mouseState.wasReleased || (data.wasReleased || false);\r\n this.mouseState.wasMoved = this.mouseState.wasMoved || (data.deltaX !== 0 || data.deltaY !== 0);\r\n }\r\n\r\n /**\r\n * Handle keyboard update messages from the host\r\n */\r\n public handleKeyboardUpdate(data: {\r\n type: 'keydown' | 'keyup';\r\n key: string;\r\n code: string;\r\n shiftKey: boolean;\r\n ctrlKey: boolean;\r\n altKey: boolean;\r\n metaKey: boolean;\r\n timestamp: number;\r\n }): void {\r\n // Skip processing if interactions are disabled\r\n if (!this.isEnabled) return;\r\n const key = data.key.toLowerCase();\r\n \r\n if (data.type === 'keydown') {\r\n if (!this.keyboardState.activeKeys.has(key)) {\r\n this.keyboardState.activeKeys.add(key);\r\n this.keyboardState.pressedThisFrame.add(key);\r\n this.keyboardState.lastKeyPressed = data.key;\r\n }\r\n } else if (data.type === 'keyup') {\r\n this.keyboardState.activeKeys.delete(key);\r\n this.keyboardState.releasedThisFrame.add(key);\r\n this.keyboardState.lastKeyReleased = data.key;\r\n }\r\n \r\n // Update modifier keys\r\n this.keyboardState.shift = data.shiftKey;\r\n this.keyboardState.ctrl = data.ctrlKey;\r\n this.keyboardState.alt = data.altKey;\r\n this.keyboardState.meta = data.metaKey;\r\n }\r\n\r\n /**\r\n * Handle touch update messages from the host\r\n */\r\n public handleTouchUpdate(data: {\r\n type: 'touchstart' | 'touchmove' | 'touchend' | 'touchcancel';\r\n touches: Array<{\r\n identifier: number;\r\n clientX: number;\r\n clientY: number;\r\n pressure: number;\r\n radiusX: number;\r\n radiusY: number;\r\n rotationAngle: number;\r\n force: number;\r\n }>;\r\n timestamp: number;\r\n }): void {\r\n // Skip processing if interactions are disabled\r\n if (!this.isEnabled) return;\r\n // Clear frame-based touch events\r\n this.touchState.started = [];\r\n this.touchState.moved = [];\r\n this.touchState.ended = [];\r\n \r\n // Convert touch data to our TouchPoint format\r\n const touches: TouchPoint[] = data.touches.map((touch) => ({\r\n id: touch.identifier,\r\n x: touch.clientX,\r\n y: touch.clientY,\r\n pressure: touch.pressure || 0,\r\n radius: Math.max(touch.radiusX || 0, touch.radiusY || 0),\r\n radiusX: touch.radiusX || 0,\r\n radiusY: touch.radiusY || 0,\r\n rotationAngle: touch.rotationAngle || 0,\r\n force: touch.force || touch.pressure || 0,\r\n deltaX: 0, // Could be calculated if we track previous positions\r\n deltaY: 0,\r\n velocity: { x: 0, y: 0 }, // Could be calculated if we track movement\r\n isNew: data.type === 'touchstart',\r\n isActive: true,\r\n isEnding: data.type === 'touchend' || data.type === 'touchcancel'\r\n }));\r\n \r\n // Update touch state\r\n this.touchState.points = touches;\r\n this.touchState.count = touches.length;\r\n this.touchState.primary = touches[0] || null;\r\n \r\n // Set frame-based events based on message type\r\n if (data.type === 'touchstart') {\r\n this.touchState.started = touches;\r\n } else if (data.type === 'touchmove') {\r\n this.touchState.moved = touches;\r\n } else if (data.type === 'touchend' || data.type === 'touchcancel') {\r\n this.touchState.ended = touches;\r\n }\r\n \r\n // Note: Advanced gesture recognition is handled in the InteractionManager\r\n // on the host side. For now, we provide basic gesture state structure.\r\n // In the future, we could move gesture recognition here or receive \r\n // gesture data from the host.\r\n this.touchState.gestures = {\r\n isPinching: false,\r\n isRotating: false,\r\n isPanning: false,\r\n isTapping: false,\r\n pinchScale: 1,\r\n pinchDelta: 0,\r\n rotationAngle: 0,\r\n rotationDelta: 0,\r\n panDelta: { x: 0, y: 0 },\r\n tapCount: 0,\r\n lastTapTime: 0,\r\n tapPosition: null\r\n };\r\n }\r\n\r\n /**\r\n * Reset all interaction state (called when loading new scene)\r\n */\r\n public resetInteractionState(): void {\r\n // Reset mouse state\r\n Object.assign(this.mouseState, {\r\n x: 0, y: 0,\r\n isInCanvas: false,\r\n isPressed: false,\r\n leftButton: false,\r\n rightButton: false,\r\n middleButton: false,\r\n velocity: { x: 0, y: 0 },\r\n deltaX: 0,\r\n deltaY: 0,\r\n wheelDelta: 0,\r\n wheelX: 0,\r\n wheelY: 0,\r\n wasPressed: false,\r\n wasReleased: false,\r\n wasMoved: false\r\n });\r\n\r\n // Reset keyboard state\r\n this.keyboardState.activeKeys.clear();\r\n this.keyboardState.pressedThisFrame.clear();\r\n this.keyboardState.releasedThisFrame.clear();\r\n this.keyboardState.lastKeyPressed = '';\r\n this.keyboardState.lastKeyReleased = '';\r\n this.keyboardState.shift = false;\r\n this.keyboardState.ctrl = false;\r\n this.keyboardState.alt = false;\r\n this.keyboardState.meta = false;\r\n\r\n // Reset touch state\r\n this.touchState.points = [];\r\n this.touchState.count = 0;\r\n this.touchState.started = [];\r\n this.touchState.moved = [];\r\n this.touchState.ended = [];\r\n this.touchState.primary = null;\r\n Object.assign(this.touchState.gestures, {\r\n isPinching: false,\r\n isRotating: false,\r\n isPanning: false,\r\n isTapping: false,\r\n pinchScale: 1,\r\n pinchDelta: 0,\r\n rotationAngle: 0,\r\n rotationDelta: 0,\r\n panDelta: { x: 0, y: 0 },\r\n tapCount: 0,\r\n lastTapTime: 0,\r\n tapPosition: null\r\n });\r\n }\r\n\r\n /**\r\n * Enable or disable interaction processing\r\n */\r\n public setInteractionEnabled(enabled: boolean): void {\r\n this.isEnabled = enabled;\r\n \r\n // If disabled, reset all interaction states to prevent stale data\r\n if (!enabled) {\r\n this.resetInteractionStates();\r\n }\r\n }\r\n\r\n /**\r\n * Get current interaction enabled state\r\n */\r\n public getInteractionEnabled(): boolean {\r\n return this.isEnabled;\r\n }\r\n\r\n /**\r\n * Reset all interaction states to default values\r\n */\r\n private resetInteractionStates(): void {\r\n // Reset mouse state\r\n this.mouseState.x = 0;\r\n this.mouseState.y = 0;\r\n this.mouseState.isInCanvas = false;\r\n this.mouseState.isPressed = false;\r\n this.mouseState.leftButton = false;\r\n this.mouseState.rightButton = false;\r\n this.mouseState.middleButton = false;\r\n this.mouseState.velocity.x = 0;\r\n this.mouseState.velocity.y = 0;\r\n this.mouseState.deltaX = 0;\r\n this.mouseState.deltaY = 0;\r\n this.mouseState.wheelDelta = 0;\r\n this.mouseState.wheelX = 0;\r\n this.mouseState.wheelY = 0;\r\n this.mouseState.wasPressed = false;\r\n this.mouseState.wasReleased = false;\r\n this.mouseState.wasMoved = false;\r\n\r\n // Reset keyboard state\r\n this.keyboardState.activeKeys.clear();\r\n this.keyboardState.pressedThisFrame.clear();\r\n this.keyboardState.releasedThisFrame.clear();\r\n this.keyboardState.lastKeyPressed = '';\r\n this.keyboardState.lastKeyReleased = '';\r\n this.keyboardState.shift = false;\r\n this.keyboardState.ctrl = false;\r\n this.keyboardState.alt = false;\r\n this.keyboardState.meta = false;\r\n\r\n // Reset touch state\r\n this.touchState.points = [];\r\n this.touchState.count = 0;\r\n this.touchState.started = [];\r\n this.touchState.moved = [];\r\n this.touchState.ended = [];\r\n this.touchState.primary = null;\r\n this.touchState.gestures.isPinching = false;\r\n this.touchState.gestures.isRotating = false;\r\n this.touchState.gestures.isPanning = false;\r\n this.touchState.gestures.isTapping = false;\r\n this.touchState.gestures.pinchScale = 1;\r\n this.touchState.gestures.pinchDelta = 0;\r\n this.touchState.gestures.rotationAngle = 0;\r\n this.touchState.gestures.rotationDelta = 0;\r\n this.touchState.gestures.panDelta = { x: 0, y: 0 };\r\n this.touchState.gestures.tapCount = 0;\r\n this.touchState.gestures.lastTapTime = 0;\r\n this.touchState.gestures.tapPosition = null;\r\n }\r\n} ","/**\r\n * Computer Vision System for Phase 11 - MediaPipe Tasks Vision Integration\r\n * \r\n * Handles face detection, hand tracking, pose detection, body segmentation,\r\n * and emotion detection using MediaPipe Tasks Vision with selective activation\r\n * and automatic cleanup.\r\n * \r\n * Architecture:\r\n * - Selective loading: Only load MediaPipe models when features are activated\r\n * - Frame-rate tied: CV processing tied to scene processing rate with configurable divisors\r\n * - Non-blocking: CV processing with timeout prevents blocking scene rendering\r\n * - Automatic cleanup: Clear results when features are deactivated\r\n * - Reference counting: FaceLandmarker shared between faceMesh and emotionDetection\r\n */\r\n\r\nimport type {\r\n CVFeature,\r\n CVFrameRateMode,\r\n FaceData,\r\n HandData,\r\n PoseData,\r\n SegmentationData,\r\n CVProcessingStats,\r\n CVWorkerInitMessage,\r\n CVWorkerConfigMessage,\r\n CVWorkerProcessMessage,\r\n CVWorkerResultMessage\r\n} from '../types/index.js';\r\n// Use classic worker for MediaPipe compatibility\r\n// import CVTasksWorker from './cv-tasks.worker.ts?worker&module';\r\n\r\nexport class CVSystem {\r\n // MediaPipe Tasks Vision worker\r\n private cvWorker: Worker | null = null;\r\n private workerRestartCount = 0;\r\n private maxWorkerRestarts = 3;\r\n private workerLastRestart = 0;\r\n private workerRestartCooldown = 5000; // 5 seconds\r\n \r\n // Feature activation state\r\n private activeFeatures: Set<CVFeature> = new Set();\r\n private pendingFeatures: Set<CVFeature> = new Set(); // Features to restore after restart\r\n \r\n // Reference counting: FaceLandmarker is shared between faceMesh and emotionDetection.\r\n // Track who requested it so we only teardown when nobody needs it.\r\n private faceMeshRequestedBy: Set<'direct' | 'emotions'> = new Set();\r\n \r\n // CV Results cache (for non-blocking processing)\r\n private results = {\r\n faces: [] as FaceData[],\r\n hands: [] as HandData[], \r\n pose: null as PoseData | null,\r\n segmentation: null as SegmentationData | null\r\n };\r\n \r\n // Processing state and performance tracking\r\n private processing = false;\r\n private cvFrameCounter = 0;\r\n private cvFrameRateMode: CVFrameRateMode = 'quarter'; // Default: 1/4 scene rate\r\n private sceneTargetFPS = 60; // Will be updated from scene processing rate\r\n private processingStartTime = 0;\r\n private processingTimes: number[] = [];\r\n \r\n // CV Frame Rate Tracking (similar to main core)\r\n private cvFrameTimes: number[] = [];\r\n private lastCVFrameTime = 0;\r\n private actualCVFPS = 0;\r\n \r\n private debugMode = false; // Debug mode disabled for production\r\n\r\n constructor() {\r\n this.debugLog('🔧 CVSystem initialized for MediaPipe Tasks Vision');\r\n }\r\n\r\n private debugLog(...args: any[]): void {\r\n if (this.debugMode) {\r\n console.log('🔧 [CVSystem]', ...args);\r\n }\r\n }\r\n\r\n setDebugMode(enabled: boolean): void {\r\n this.debugMode = enabled;\r\n this.debugLog(`Debug mode ${enabled ? 'enabled' : 'disabled'}`);\r\n \r\n // Propagate to CV worker\r\n if (this.cvWorker) {\r\n this.cvWorker.postMessage({ type: 'debug', enabled });\r\n }\r\n }\r\n\r\n /**\r\n * Update CV frame rate configuration (called from worker)\r\n */\r\n updateCVFrameRate(mode: CVFrameRateMode, sceneTargetFPS: number): void {\r\n this.cvFrameRateMode = mode;\r\n this.sceneTargetFPS = sceneTargetFPS;\r\n \r\n this.debugLog(`CV frame rate updated: mode=${mode}, sceneTargetFPS=${sceneTargetFPS}`);\r\n }\r\n\r\n /**\r\n * Initialize MediaPipe Tasks Vision worker\r\n */\r\n private async ensureCVWorker(): Promise<void> {\r\n if (this.cvWorker) return;\r\n\r\n try {\r\n this.debugLog('🔧 Creating MediaPipe Tasks Vision worker...');\r\n // Use classic worker to support MediaPipe's importScripts usage\r\n const workerUrl = '/dist/assets/cv-tasks.worker.js';\r\n this.cvWorker = new Worker(workerUrl);\r\n \r\n this.cvWorker.addEventListener('message', (evt) => {\r\n const msg = evt.data as CVWorkerResultMessage;\r\n this.debugLog(`📨 [CV Worker -> CVSystem] ${msg.type}`, msg.success ? msg.data : msg.error);\r\n });\r\n \r\n this.cvWorker.onerror = (err) => {\r\n this.debugLog('❌ CV worker error event', err.message);\r\n this.handleWorkerFailure(`Worker error: ${err.message}`);\r\n };\r\n \r\n this.cvWorker.onmessageerror = (err) => {\r\n this.debugLog('❌ CV worker message error', err);\r\n this.handleWorkerFailure('Worker message error');\r\n };\r\n\r\n // Send debug mode before init so early logs are controlled\r\n this.cvWorker.postMessage({ type: 'debug', enabled: this.debugMode });\r\n \r\n await this.postToCV('init', {});\r\n this.debugLog('✅ CV worker initialized');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to initialize CV worker:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Handle worker failure and attempt restart\r\n */\r\n private async handleWorkerFailure(reason: string): Promise<void> {\r\n this.debugLog(`⚠️ CV Worker failure: ${reason}`);\r\n \r\n // Terminate current worker\r\n if (this.cvWorker) {\r\n this.cvWorker.terminate();\r\n this.cvWorker = null;\r\n }\r\n \r\n // Check restart limits and cooldown\r\n const now = Date.now();\r\n if (this.workerRestartCount >= this.maxWorkerRestarts) {\r\n this.debugLog('❌ Max worker restarts exceeded, giving up');\r\n return;\r\n }\r\n \r\n if (now - this.workerLastRestart < this.workerRestartCooldown) {\r\n this.debugLog('⏱️ Worker restart cooldown active, skipping restart');\r\n return;\r\n }\r\n \r\n // Save current features for restoration\r\n this.pendingFeatures = new Set(this.activeFeatures);\r\n this.activeFeatures.clear();\r\n \r\n // Attempt restart\r\n try {\r\n this.workerRestartCount++;\r\n this.workerLastRestart = now;\r\n \r\n this.debugLog(`🔄 Restarting CV worker (attempt ${this.workerRestartCount}/${this.maxWorkerRestarts})`);\r\n \r\n // Recreate worker\r\n await this.ensureCVWorker();\r\n \r\n // Restore features\r\n if (this.pendingFeatures.size > 0) {\r\n const featuresToRestore = Array.from(this.pendingFeatures);\r\n this.debugLog(`🔄 Restoring features: [${featuresToRestore.join(', ')}]`);\r\n \r\n try {\r\n await this.postToCV('config', { features: featuresToRestore });\r\n this.activeFeatures = new Set(this.pendingFeatures);\r\n this.debugLog('✅ Features restored successfully');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to restore features:', error);\r\n }\r\n \r\n this.pendingFeatures.clear();\r\n }\r\n \r\n this.debugLog('✅ CV worker restarted successfully');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to restart CV worker:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Send message to CV worker and wait for response\r\n */\r\n private postToCV(type: string, data?: any, transfer?: Transferable[]): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n if (!this.cvWorker) {\r\n return reject(new Error('CV worker not initialized'));\r\n }\r\n\r\n const timeout = setTimeout(() => {\r\n this.debugLog(`⏱️ [CV Worker] timeout for ${type}`);\r\n // On timeout, attempt worker restart for config messages\r\n if (type === 'config') {\r\n this.handleWorkerFailure(`Timeout for ${type} message`);\r\n }\r\n reject(new Error(`CV worker timeout for ${type}`));\r\n }, 5000);\r\n\r\n const onMessage = (ev: MessageEvent) => {\r\n const msg = ev.data as CVWorkerResultMessage & { restartRequired?: boolean };\r\n \r\n if (msg.type === 'result') {\r\n clearTimeout(timeout);\r\n this.cvWorker!.removeEventListener('message', onMessage);\r\n \r\n if (msg.success) {\r\n this.debugLog(`✅ [CV Worker] response for ${type}`, msg.data);\r\n resolve(msg.data);\r\n } else {\r\n this.debugLog(`❌ [CV Worker] error response for ${type}`, msg.error);\r\n \r\n // Check if worker restart is required\r\n if (msg.restartRequired) {\r\n this.handleWorkerFailure(`Worker reported restart required: ${msg.error}`);\r\n }\r\n \r\n reject(new Error(msg.error || 'CV worker error'));\r\n }\r\n }\r\n };\r\n\r\n this.cvWorker.addEventListener('message', onMessage);\r\n \r\n const message: CVWorkerInitMessage | CVWorkerConfigMessage | CVWorkerProcessMessage = {\r\n type: type as any,\r\n ...data\r\n };\r\n \r\n this.debugLog(`📤 [CVSystem -> CV Worker] ${type}`, data);\r\n this.cvWorker.postMessage(message, transfer || []);\r\n });\r\n }\r\n\r\n /**\r\n * Enable face detection feature (bounding boxes only)\r\n */\r\n async enableFaceDetection(): Promise<void> {\r\n if (this.activeFeatures.has('faceDetection')) return;\r\n \r\n try {\r\n this.debugLog('🔧 Enabling face detection...');\r\n \r\n if (this.activeFeatures.size >= 3 && !this.checkWebGLContextAvailability()) {\r\n this.debugLog('⚠️ Warning: WebGL contexts may be running low. Consider disabling unused CV features.');\r\n }\r\n \r\n await this.ensureCVWorker();\r\n \r\n this.activeFeatures.add('faceDetection');\r\n const newFeatures = Array.from(this.activeFeatures);\r\n await this.postToCV('config', { features: newFeatures });\r\n \r\n this.debugLog('✅ Face detection enabled');\r\n } catch (error) {\r\n this.activeFeatures.delete('faceDetection');\r\n this.debugLog('❌ Failed to enable face detection:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Disable face detection and cleanup\r\n */\r\n async disableFaceDetection(): Promise<void> {\r\n if (!this.activeFeatures.has('faceDetection')) return;\r\n \r\n try {\r\n this.debugLog('🔧 Disabling face detection...');\r\n \r\n this.activeFeatures.delete('faceDetection');\r\n // Clear faces results if no face-related features are active\r\n if (!this.activeFeatures.has('faceMesh')) {\r\n this.results.faces = [];\r\n }\r\n \r\n const newFeatures = Array.from(this.activeFeatures);\r\n await this.postToCV('config', { features: newFeatures });\r\n \r\n this.debugLog('✅ Face detection disabled and cleaned up');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to disable face detection:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Enable face mesh feature (468-point facial landmarks)\r\n */\r\n async enableFaceMesh(): Promise<void> {\r\n this.faceMeshRequestedBy.add('direct');\r\n if (this.activeFeatures.has('faceMesh')) return;\r\n \r\n try {\r\n this.debugLog('🔧 Enabling face mesh...');\r\n \r\n if (this.activeFeatures.size >= 3 && !this.checkWebGLContextAvailability()) {\r\n this.debugLog('⚠️ Warning: WebGL contexts may be running low. Consider disabling unused CV features.');\r\n }\r\n \r\n await this.ensureCVWorker();\r\n \r\n this.activeFeatures.add('faceMesh');\r\n const newFeatures = Array.from(this.activeFeatures);\r\n await this.postToCV('config', { features: newFeatures });\r\n \r\n this.debugLog('✅ Face mesh enabled');\r\n } catch (error) {\r\n this.activeFeatures.delete('faceMesh');\r\n this.debugLog('❌ Failed to enable face mesh:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Disable face mesh and cleanup\r\n */\r\n async disableFaceMesh(): Promise<void> {\r\n if (!this.activeFeatures.has('faceMesh')) return;\r\n \r\n this.faceMeshRequestedBy.delete('direct');\r\n this.activeFeatures.delete('faceMesh');\r\n \r\n try {\r\n this.debugLog('🔧 Disabling face mesh...');\r\n \r\n if (!this.activeFeatures.has('faceDetection') && !this.activeFeatures.has('emotionDetection')) {\r\n this.results.faces = [];\r\n }\r\n \r\n // If emotionDetection still needs FaceLandmarker, include faceMesh in\r\n // worker config so the model stays loaded (worker handles the dependency).\r\n const workerFeatures = new Set(this.activeFeatures);\r\n if (this.faceMeshRequestedBy.has('emotions')) {\r\n workerFeatures.add('faceMesh');\r\n }\r\n \r\n await this.postToCV('config', { features: Array.from(workerFeatures) });\r\n \r\n this.debugLog('✅ Face mesh disabled');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to disable face mesh:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Enable emotion detection (blendshape-based expressions + head pose).\r\n * Internally requires FaceLandmarker - managed via reference counting.\r\n */\r\n async enableEmotionDetection(): Promise<void> {\r\n if (this.activeFeatures.has('emotionDetection')) return;\r\n \r\n this.faceMeshRequestedBy.add('emotions');\r\n\r\n try {\r\n this.debugLog('🔧 Enabling emotion detection...');\r\n \r\n if (this.activeFeatures.size >= 3 && !this.checkWebGLContextAvailability()) {\r\n this.debugLog('⚠️ Warning: WebGL contexts may be running low. Consider disabling unused CV features.');\r\n }\r\n \r\n await this.ensureCVWorker();\r\n \r\n this.activeFeatures.add('emotionDetection');\r\n \r\n // Worker config must include both emotionDetection AND faceMesh so the\r\n // FaceLandmarker model gets loaded. The worker knows to run landmarks\r\n // when either feature is present.\r\n const workerFeatures = new Set(this.activeFeatures);\r\n workerFeatures.add('faceMesh');\r\n \r\n await this.postToCV('config', { features: Array.from(workerFeatures) });\r\n \r\n this.debugLog('✅ Emotion detection enabled');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to enable emotion detection:', error);\r\n this.activeFeatures.delete('emotionDetection');\r\n this.faceMeshRequestedBy.delete('emotions');\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Disable emotion detection and cleanup\r\n */\r\n async disableEmotionDetection(): Promise<void> {\r\n if (!this.activeFeatures.has('emotionDetection')) return;\r\n \r\n this.faceMeshRequestedBy.delete('emotions');\r\n \r\n try {\r\n this.debugLog('🔧 Disabling emotion detection...');\r\n \r\n this.activeFeatures.delete('emotionDetection');\r\n \r\n if (!this.activeFeatures.has('faceDetection') && !this.activeFeatures.has('faceMesh')) {\r\n this.results.faces = [];\r\n }\r\n \r\n // Worker config: include faceMesh only if someone still needs FaceLandmarker\r\n const workerFeatures = new Set(this.activeFeatures);\r\n if (this.faceMeshRequestedBy.has('direct')) {\r\n workerFeatures.add('faceMesh');\r\n }\r\n \r\n await this.postToCV('config', { features: Array.from(workerFeatures) });\r\n \r\n this.debugLog('✅ Emotion detection disabled and cleaned up');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to disable emotion detection:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Enable hand tracking feature\r\n */\r\n async enableHandTracking(): Promise<void> {\r\n if (this.activeFeatures.has('handTracking')) return;\r\n \r\n try {\r\n this.debugLog('🔧 Enabling hand tracking...');\r\n await this.ensureCVWorker();\r\n \r\n this.activeFeatures.add('handTracking');\r\n const newFeatures = Array.from(this.activeFeatures);\r\n await this.postToCV('config', { features: newFeatures });\r\n \r\n this.debugLog('✅ Hand tracking enabled');\r\n } catch (error) {\r\n this.activeFeatures.delete('handTracking');\r\n this.debugLog('❌ Failed to enable hand tracking:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Disable hand tracking and cleanup\r\n */\r\n async disableHandTracking(): Promise<void> {\r\n if (!this.activeFeatures.has('handTracking')) return;\r\n \r\n try {\r\n this.debugLog('🔧 Disabling hand tracking...');\r\n \r\n this.activeFeatures.delete('handTracking');\r\n this.results.hands = [];\r\n \r\n const newFeatures = Array.from(this.activeFeatures);\r\n await this.postToCV('config', { features: newFeatures });\r\n \r\n this.debugLog('✅ Hand tracking disabled and cleaned up');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to disable hand tracking:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Enable pose detection feature\r\n */\r\n async enablePoseDetection(): Promise<void> {\r\n if (this.activeFeatures.has('poseDetection')) return;\r\n \r\n try {\r\n this.debugLog('🔧 Enabling pose detection...');\r\n await this.ensureCVWorker();\r\n \r\n this.activeFeatures.add('poseDetection');\r\n const newFeatures = Array.from(this.activeFeatures);\r\n await this.postToCV('config', { features: newFeatures });\r\n \r\n this.debugLog('✅ Pose detection enabled');\r\n } catch (error) {\r\n this.activeFeatures.delete('poseDetection');\r\n this.debugLog('❌ Failed to enable pose detection:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Disable pose detection and cleanup\r\n */\r\n async disablePoseDetection(): Promise<void> {\r\n if (!this.activeFeatures.has('poseDetection')) return;\r\n \r\n try {\r\n this.debugLog('🔧 Disabling pose detection...');\r\n \r\n this.activeFeatures.delete('poseDetection');\r\n this.results.pose = null;\r\n \r\n const newFeatures = Array.from(this.activeFeatures);\r\n await this.postToCV('config', { features: newFeatures });\r\n \r\n this.debugLog('✅ Pose detection disabled and cleaned up');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to disable pose detection:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Enable body segmentation feature\r\n */\r\n async enableBodySegmentation(): Promise<void> {\r\n if (this.activeFeatures.has('bodySegmentation')) return;\r\n \r\n try {\r\n this.debugLog('🔧 Enabling body segmentation...');\r\n await this.ensureCVWorker();\r\n \r\n this.activeFeatures.add('bodySegmentation');\r\n const newFeatures = Array.from(this.activeFeatures);\r\n await this.postToCV('config', { features: newFeatures });\r\n \r\n this.debugLog('✅ Body segmentation enabled');\r\n } catch (error) {\r\n this.activeFeatures.delete('bodySegmentation');\r\n this.debugLog('❌ Failed to enable body segmentation:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Disable body segmentation and cleanup\r\n */\r\n async disableBodySegmentation(): Promise<void> {\r\n if (!this.activeFeatures.has('bodySegmentation')) return;\r\n \r\n try {\r\n this.debugLog('🔧 Disabling body segmentation...');\r\n \r\n this.activeFeatures.delete('bodySegmentation');\r\n this.results.segmentation = null;\r\n \r\n const newFeatures = Array.from(this.activeFeatures);\r\n await this.postToCV('config', { features: newFeatures });\r\n \r\n this.debugLog('✅ Body segmentation disabled and cleaned up');\r\n } catch (error) {\r\n this.debugLog('❌ Failed to disable body segmentation:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Process video frame with active CV features\r\n */\r\n async processFrame(bitmap: ImageBitmap): Promise<void> {\r\n if (this.processing || this.activeFeatures.size === 0) {\r\n return; // Skip if already processing or no features active\r\n }\r\n\r\n // Check if we should process this frame based on CV frame rate\r\n this.cvFrameCounter++;\r\n const shouldProcess = this.shouldProcessFrame();\r\n \r\n if (!shouldProcess) {\r\n return;\r\n }\r\n\r\n this.processing = true;\r\n this.processingStartTime = performance.now();\r\n \r\n // Track CV frame rate (similar to main core)\r\n this.trackCVFrameRate();\r\n \r\n this.debugLog(`🎬 Processing frame ${this.cvFrameCounter} with features:`, Array.from(this.activeFeatures));\r\n\r\n try {\r\n const features = Array.from(this.activeFeatures);\r\n const timestamp = performance.now();\r\n \r\n // Process with timeout to prevent blocking\r\n const processPromise = this.postToCV('process', {\r\n bitmap: bitmap,\r\n timestamp: timestamp,\r\n features: features\r\n }, [bitmap]);\r\n\r\n const timeoutPromise = new Promise((_, reject) => {\r\n setTimeout(() => reject(new Error('CV processing timeout')), 500); // Increased timeout for MediaPipe\r\n });\r\n\r\n const results = await Promise.race([processPromise, timeoutPromise]);\r\n \r\n // Update results cache (only if features are still active to prevent race conditions)\r\n if (results.faces && (this.activeFeatures.has('faceDetection') || this.activeFeatures.has('faceMesh') || this.activeFeatures.has('emotionDetection'))) {\r\n this.results.faces = results.faces;\r\n this.debugLog(`📥 Received ${results.faces.length} face results`);\r\n }\r\n if (results.hands && this.activeFeatures.has('handTracking')) {\r\n this.results.hands = results.hands;\r\n this.debugLog(`📥 Received ${results.hands.length} hand results`);\r\n }\r\n if (results.pose && this.activeFeatures.has('poseDetection')) {\r\n this.results.pose = results.pose;\r\n this.debugLog(`📥 Received pose results with ${results.pose.landmarks.length} landmarks`);\r\n }\r\n if (results.segmentation && this.activeFeatures.has('bodySegmentation')) {\r\n this.results.segmentation = results.segmentation;\r\n this.debugLog(`📥 Received segmentation results ${results.segmentation.width}x${results.segmentation.height}`);\r\n }\r\n\r\n // Track processing time\r\n const processingTime = performance.now() - this.processingStartTime;\r\n this.processingTimes.push(processingTime);\r\n if (this.processingTimes.length > 30) {\r\n this.processingTimes.shift();\r\n }\r\n\r\n } catch (error) {\r\n this.debugLog('⚠️ CV processing failed:', error);\r\n // Keep previous results, don't clear cache\r\n } finally {\r\n this.processing = false;\r\n }\r\n }\r\n\r\n /**\r\n * Check if current frame should be processed based on CV frame rate mode\r\n */\r\n private shouldProcessFrame(): boolean {\r\n const divisor = this.getFrameRateDivisor();\r\n return this.cvFrameCounter % divisor === 0;\r\n }\r\n\r\n /**\r\n * Track CV processing frame rate (similar to main core)\r\n */\r\n private trackCVFrameRate(): void {\r\n const now = performance.now();\r\n \r\n if (this.lastCVFrameTime > 0) {\r\n const deltaTime = now - this.lastCVFrameTime;\r\n this.cvFrameTimes.push(deltaTime);\r\n \r\n // Keep only last 30 frame times for averaging\r\n if (this.cvFrameTimes.length > 30) {\r\n this.cvFrameTimes.shift();\r\n }\r\n \r\n // Calculate actual CV FPS\r\n if (this.cvFrameTimes.length > 0) {\r\n const avgDeltaTime = this.cvFrameTimes.reduce((a, b) => a + b, 0) / this.cvFrameTimes.length;\r\n this.actualCVFPS = Math.round(1000 / avgDeltaTime);\r\n }\r\n }\r\n \r\n this.lastCVFrameTime = now;\r\n }\r\n\r\n /**\r\n * Get frame rate divisor based on current mode\r\n */\r\n private getFrameRateDivisor(): number {\r\n switch (this.cvFrameRateMode) {\r\n case 'full': return 1;\r\n case 'half': return 2;\r\n case 'quarter': return 4;\r\n case 'eighth': return 8;\r\n default: return 4;\r\n }\r\n }\r\n\r\n /**\r\n * Get current CV results\r\n */\r\n getResults(): {\r\n faces: FaceData[];\r\n hands: HandData[];\r\n pose: PoseData | null;\r\n segmentation: SegmentationData | null;\r\n } {\r\n return { ...this.results };\r\n }\r\n\r\n /**\r\n * Get processing statistics\r\n */\r\n getStats(): CVProcessingStats {\r\n const avgProcessingTime = this.processingTimes.length > 0 \r\n ? this.processingTimes.reduce((a, b) => a + b, 0) / this.processingTimes.length \r\n : 0;\r\n\r\n const targetFPS = this.sceneTargetFPS / this.getFrameRateDivisor();\r\n\r\n return {\r\n activeFeatures: Array.from(this.activeFeatures),\r\n processingTime: avgProcessingTime,\r\n effectiveFPS: targetFPS,\r\n actualFPS: this.actualCVFPS, // Add actual measured CV FPS\r\n isProcessing: this.processing\r\n };\r\n }\r\n\r\n /**\r\n * Check WebGL context availability before enabling features\r\n */\r\n private checkWebGLContextAvailability(): boolean {\r\n try {\r\n const canvas = new OffscreenCanvas(1, 1);\r\n const gl = canvas.getContext('webgl');\r\n \r\n if (!gl) {\r\n this.debugLog('⚠️ WebGL contexts may be exhausted');\r\n return false;\r\n }\r\n \r\n // Clean up test context\r\n const ext = gl.getExtension('WEBGL_lose_context');\r\n if (ext) ext.loseContext();\r\n \r\n return true;\r\n } catch (error) {\r\n this.debugLog('⚠️ WebGL context check failed:', error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Get CV control interface for artist API\r\n */\r\n getControlInterface() {\r\n return {\r\n enableFaceDetection: (enabled?: boolean) => {\r\n if (enabled === false) {\r\n return this.disableFaceDetection();\r\n } else {\r\n return this.enableFaceDetection();\r\n }\r\n },\r\n disableFaceDetection: () => this.disableFaceDetection(),\r\n enableFaceMesh: (enabled?: boolean) => {\r\n if (enabled === false) {\r\n return this.disableFaceMesh();\r\n } else {\r\n return this.enableFaceMesh();\r\n }\r\n },\r\n disableFaceMesh: () => this.disableFaceMesh(),\r\n enableEmotionDetection: (enabled?: boolean) => {\r\n if (enabled === false) {\r\n return this.disableEmotionDetection();\r\n } else {\r\n return this.enableEmotionDetection();\r\n }\r\n },\r\n disableEmotionDetection: () => this.disableEmotionDetection(),\r\n enableHandTracking: (enabled?: boolean) => {\r\n if (enabled === false) {\r\n return this.disableHandTracking();\r\n } else {\r\n return this.enableHandTracking();\r\n }\r\n },\r\n disableHandTracking: () => this.disableHandTracking(),\r\n enablePoseDetection: (enabled?: boolean) => {\r\n if (enabled === false) {\r\n return this.disablePoseDetection();\r\n } else {\r\n return this.enablePoseDetection();\r\n }\r\n },\r\n disablePoseDetection: () => this.disablePoseDetection(),\r\n enableBodySegmentation: (enabled?: boolean) => {\r\n if (enabled === false) {\r\n return this.disableBodySegmentation();\r\n } else {\r\n return this.enableBodySegmentation();\r\n }\r\n },\r\n disableBodySegmentation: () => this.disableBodySegmentation(),\r\n getActiveFeatures: () => Array.from(this.activeFeatures),\r\n isProcessing: () => this.processing,\r\n getStats: () => this.getStats(),\r\n getWorkerStatus: () => ({\r\n healthy: !!this.cvWorker,\r\n restartCount: this.workerRestartCount,\r\n maxRestarts: this.maxWorkerRestarts\r\n }),\r\n restartWorker: () => this.handleWorkerFailure('Manual restart requested'),\r\n \r\n // WebGL context monitoring\r\n checkWebGLAvailability: () => this.checkWebGLContextAvailability(),\r\n getResourceUsage: () => ({\r\n activeFeatures: this.activeFeatures.size,\r\n estimatedWebGLContexts: this.activeFeatures.size * 2, // ~2 contexts per feature\r\n webglAvailable: this.checkWebGLContextAvailability()\r\n })\r\n };\r\n }\r\n\r\n /**\r\n * Cleanup all CV resources\r\n */\r\n async cleanup(): Promise<void> {\r\n this.debugLog('🔧 Cleaning up CVSystem...');\r\n \r\n // Disable all features (triggers cleanup)\r\n for (const feature of Array.from(this.activeFeatures)) {\r\n switch (feature) {\r\n case 'faceDetection':\r\n await this.disableFaceDetection();\r\n break;\r\n case 'faceMesh':\r\n await this.disableFaceMesh();\r\n break;\r\n case 'emotionDetection':\r\n await this.disableEmotionDetection();\r\n break;\r\n case 'handTracking':\r\n await this.disableHandTracking();\r\n break;\r\n case 'poseDetection':\r\n await this.disablePoseDetection();\r\n break;\r\n case 'bodySegmentation':\r\n await this.disableBodySegmentation();\r\n break;\r\n }\r\n }\r\n\r\n // Close worker\r\n if (this.cvWorker) {\r\n this.cvWorker.terminate();\r\n this.cvWorker = null;\r\n }\r\n\r\n // Clear state\r\n this.activeFeatures.clear();\r\n this.pendingFeatures.clear();\r\n this.faceMeshRequestedBy.clear();\r\n this.workerRestartCount = 0;\r\n this.results.faces = [];\r\n this.results.hands = [];\r\n this.results.pose = null;\r\n this.results.segmentation = null;\r\n this.processing = false;\r\n this.processingTimes = [];\r\n\r\n this.debugLog('✅ CVSystem cleanup complete');\r\n }\r\n}","/**\r\n * Worker-side Video System for Phase 10 & 11 - CORRECT OffscreenCanvas Implementation + CV Integration\r\n * \r\n * CORRECT Approach:\r\n * 1. Host creates OffscreenCanvas (no context!)\r\n * 2. Host transfers OffscreenCanvas to worker\r\n * 3. Worker receives OffscreenCanvas and gets context\r\n * 4. Host sends ImageBitmap frames to worker\r\n * 5. Worker draws ImageBitmap frames to its OffscreenCanvas\r\n * 6. Worker performs all analysis and effects on OffscreenCanvas\r\n * 7. CVSystem processes frames for computer vision features\r\n * \r\n * This provides:\r\n * - True worker-side processing with full GPU access\r\n * - Zero-copy OffscreenCanvas ownership transfer\r\n * - Optimal performance for CV and artist effects\r\n * - Proper separation: host = coordination, worker = processing + CV\r\n */\r\n\r\nimport { CVSystem } from './CVSystem.js';\r\nimport type { CVFrameRateMode } from '../types/index.js';\r\n\r\n/**\r\n * Video stream categorization type\r\n * - main: Primary video with CV processing (viji.video)\r\n * - additional: Host-provided MediaStreams without CV (viji.streams[])\r\n * - directFrame: Injected frames from compositor pipeline (viji.streams[], after additional)\r\n * - device: Device-provided camera streams (device.video)\r\n */\r\nexport type VideoStreamType = 'main' | 'additional' | 'directFrame' | 'device';\r\n\r\nexport class VideoSystem {\r\n // ✅ CORRECT: Worker-owned OffscreenCanvas (transferred from host)\r\n private offscreenCanvas: OffscreenCanvas | null = null;\r\n private ctx: OffscreenCanvasRenderingContext2D | null = null;\r\n private gl: WebGLRenderingContext | WebGL2RenderingContext | null = null;\r\n \r\n // CV processing helpers\r\n private cvScratchCanvas: OffscreenCanvas | null = null;\r\n private cvScratchContext: OffscreenCanvasRenderingContext2D | null = null;\r\n \r\n // Debug logging control\r\n private debugMode = false;\r\n \r\n // GPU-only mode flag (for shader compositor only - P5/Canvas need OffscreenCanvas)\r\n private directGPUMode = false;\r\n\r\n // Stream categorization\r\n private streamType: VideoStreamType = 'additional';\r\n private deviceId: string | undefined;\r\n\r\n /**\r\n * Enable or disable debug logging\r\n */\r\n setDebugMode(enabled: boolean): void {\r\n this.debugMode = enabled;\r\n // Propagate to CVSystem\r\n if (this.cvSystem) {\r\n this.cvSystem.setDebugMode(enabled);\r\n }\r\n }\r\n\r\n /**\r\n * Debug logging helper\r\n */\r\n private debugLog(message: string, ...args: any[]): void {\r\n if (this.debugMode) {\r\n console.log(message, ...args);\r\n }\r\n }\r\n \r\n // Frame processing configuration\r\n private targetFrameRate = 30; // Default target FPS for video processing\r\n private lastFrameTime = 0;\r\n private frameInterval = 1000 / this.targetFrameRate; // ms between frames\r\n \r\n // Processing state\r\n private hasLoggedFirstFrame = false;\r\n private frameCount = 0;\r\n \r\n // Video state for artist API\r\n private videoState = {\r\n isConnected: false,\r\n currentFrame: null as OffscreenCanvas | ImageBitmap | null,\r\n frameWidth: 0,\r\n frameHeight: 0,\r\n frameRate: 0,\r\n frameData: null as ImageData | null\r\n };\r\n \r\n // Phase 11 - CV System Integration\r\n private cvSystem: CVSystem;\r\n\r\n constructor() {\r\n // VideoSystem ready for OffscreenCanvas processing + CV\r\n this.cvSystem = new CVSystem();\r\n }\r\n\r\n /**\r\n * Set stream type and optional device ID\r\n */\r\n setStreamType(type: VideoStreamType, deviceId?: string): void {\r\n this.streamType = type;\r\n this.deviceId = deviceId;\r\n }\r\n\r\n /**\r\n * Get stream type\r\n */\r\n getStreamType(): VideoStreamType {\r\n return this.streamType;\r\n }\r\n\r\n /**\r\n * Get device ID (for device streams)\r\n */\r\n getDeviceId(): string | undefined {\r\n return this.deviceId;\r\n }\r\n\r\n /**\r\n * Get the video API for inclusion in the viji object\r\n */\r\n public getVideoAPI() {\r\n const cvResults = this.cvSystem.getResults();\r\n \r\n // Grab the current frame\r\n const currentFrame = this.videoState.currentFrame;\r\n \r\n // For direct GPU mode: consume ImageBitmap after first access\r\n // (it will be closed after GPU upload, so can't be reused)\r\n if (this.directGPUMode && currentFrame instanceof ImageBitmap) {\r\n this.videoState.currentFrame = null;\r\n }\r\n \r\n return {\r\n isConnected: this.videoState.isConnected,\r\n currentFrame: currentFrame,\r\n frameWidth: this.videoState.frameWidth,\r\n frameHeight: this.videoState.frameHeight,\r\n frameRate: this.videoState.frameRate,\r\n getFrameData: () => this.videoState.frameData,\r\n \r\n // CV Results from CVSystem\r\n faces: cvResults.faces,\r\n hands: cvResults.hands,\r\n pose: cvResults.pose,\r\n segmentation: cvResults.segmentation,\r\n \r\n // CV Control Interface\r\n cv: this.cvSystem.getControlInterface()\r\n };\r\n }\r\n\r\n /**\r\n * ✅ CORRECT: Receive OffscreenCanvas transfer from host\r\n */\r\n public handleCanvasSetup(data: {\r\n offscreenCanvas: OffscreenCanvas;\r\n width: number;\r\n height: number;\r\n timestamp: number;\r\n }): void {\r\n try {\r\n // Clean up existing canvas\r\n this.disconnectVideo();\r\n \r\n // ✅ CORRECT: Receive transferred OffscreenCanvas\r\n this.offscreenCanvas = data.offscreenCanvas;\r\n \r\n // ✅ CORRECT: Get context on WORKER side (not host!)\r\n this.ctx = this.offscreenCanvas.getContext('2d', {\r\n willReadFrequently: true // Optimize for frequent getImageData calls\r\n });\r\n \r\n if (!this.ctx) {\r\n throw new Error('Failed to get 2D context from transferred OffscreenCanvas');\r\n }\r\n \r\n // Optional: Get WebGL context for advanced effects\r\n // Note: We can have multiple contexts on the same canvas\r\n try {\r\n this.gl = this.offscreenCanvas.getContext('webgl2') || this.offscreenCanvas.getContext('webgl');\r\n } catch (e) {\r\n // WebGL not available, continue with 2D\r\n this.debugLog('WebGL not available, using 2D context only');\r\n }\r\n \r\n // Update state\r\n this.videoState.isConnected = true;\r\n this.videoState.currentFrame = this.offscreenCanvas;\r\n this.videoState.frameWidth = data.width;\r\n this.videoState.frameHeight = data.height;\r\n this.frameCount = 0;\r\n this.hasLoggedFirstFrame = false;\r\n \r\n this.debugLog('✅ OffscreenCanvas received and setup completed (worker-side)', {\r\n width: data.width,\r\n height: data.height,\r\n hasWebGL: !!this.gl,\r\n targetFrameRate: this.targetFrameRate\r\n });\r\n \r\n this.debugLog('🎬 CORRECT OffscreenCanvas approach - Worker has full GPU access!');\r\n \r\n } catch (error) {\r\n console.error('Failed to setup OffscreenCanvas in worker:', error);\r\n this.disconnectVideo();\r\n }\r\n }\r\n\r\n /**\r\n * ✅ CORRECT: Receive ImageBitmap frame and draw to worker's OffscreenCanvas\r\n */\r\n public handleFrameUpdate(data: {\r\n imageBitmap: ImageBitmap;\r\n timestamp: number;\r\n }): void {\r\n if (!this.offscreenCanvas || !this.ctx) {\r\n console.warn('🔴 Received frame but OffscreenCanvas not setup');\r\n data.imageBitmap.close(); // Prevent memory leak\r\n return;\r\n }\r\n \r\n try {\r\n // Log occasionally to avoid spam (very rarely now that it's working)\r\n if (this.frameCount % 150 === 0) { // Log every 150th frame (~5 seconds at 30fps)\r\n this.debugLog('✅ Worker received ImageBitmap frame:', {\r\n bitmapSize: `${data.imageBitmap.width}x${data.imageBitmap.height}`,\r\n canvasSize: `${this.offscreenCanvas.width}x${this.offscreenCanvas.height}`,\r\n frameCount: this.frameCount,\r\n timestamp: data.timestamp\r\n });\r\n }\r\n \r\n // ✅ CORRECT: Worker draws ImageBitmap to its OffscreenCanvas\r\n this.ctx.drawImage(data.imageBitmap, 0, 0, this.offscreenCanvas.width, this.offscreenCanvas.height);\r\n \r\n // Update frame processing\r\n this.processCurrentFrame(data.timestamp);\r\n \r\n // Close the transferred ImageBitmap to free memory\r\n data.imageBitmap.close();\r\n \r\n this.frameCount++;\r\n \r\n } catch (error) {\r\n console.error('🔴 Error processing video frame (worker-side):', error);\r\n }\r\n }\r\n\r\n /**\r\n * Process current frame (called when new frame is drawn)\r\n */\r\n private async processCurrentFrame(timestamp: number): Promise<void> {\r\n if (!this.offscreenCanvas || !this.ctx) {\r\n return;\r\n }\r\n \r\n try {\r\n // Get current frame data for analysis\r\n this.videoState.frameData = this.ctx.getImageData(\r\n 0, 0, \r\n this.offscreenCanvas.width, \r\n this.offscreenCanvas.height\r\n );\r\n \r\n // Calculate frame rate based on frame arrival\r\n const deltaTime = timestamp - this.lastFrameTime;\r\n this.videoState.frameRate = deltaTime > 0 ? 1000 / deltaTime : 0;\r\n \r\n // Log first successful frame processing (once)\r\n if (!this.hasLoggedFirstFrame) {\r\n this.debugLog(`🎯 Worker-side OffscreenCanvas processing active: ${this.videoState.frameRate.toFixed(1)} FPS (${this.offscreenCanvas.width}x${this.offscreenCanvas.height})`);\r\n this.debugLog('✅ Full GPU access available for custom effects and CV analysis');\r\n this.hasLoggedFirstFrame = true;\r\n }\r\n \r\n // Phase 11 - Perform CV analysis using CVSystem \r\n // 🚀 OPTIMIZED: Use createImageBitmap(ImageData) to keep artist canvas intact\r\n if (this.videoState.frameData) {\r\n try {\r\n // Fast path: create ImageBitmap directly from ImageData (no extra canvas)\r\n const bitmap = await createImageBitmap(this.videoState.frameData);\r\n this.cvSystem.processFrame(bitmap);\r\n // Success - no need to log every frame\r\n } catch (bitmapError) {\r\n this.debugLog('⚠️ createImageBitmap failed – falling back to reusable CV canvas:', bitmapError);\r\n \r\n // Lazy-init reusable canvas/context for legacy browsers that lack createImageBitmap support\r\n if (!this.cvScratchCanvas || !this.cvScratchContext ||\r\n this.cvScratchCanvas.width !== this.videoState.frameData.width ||\r\n this.cvScratchCanvas.height !== this.videoState.frameData.height) {\r\n this.cvScratchCanvas = new OffscreenCanvas(\r\n this.videoState.frameData.width,\r\n this.videoState.frameData.height\r\n );\r\n this.cvScratchContext = this.cvScratchCanvas.getContext('2d');\r\n if (!this.cvScratchContext) {\r\n throw new Error('Failed to get 2D context for CV fallback canvas');\r\n }\r\n }\r\n \r\n this.cvScratchContext.putImageData(this.videoState.frameData, 0, 0);\r\n const fallbackBitmap = this.cvScratchCanvas.transferToImageBitmap();\r\n this.cvSystem.processFrame(fallbackBitmap);\r\n }\r\n }\r\n \r\n this.lastFrameTime = timestamp;\r\n } catch (error) {\r\n console.error('Error processing video frame (worker-side):', error);\r\n }\r\n }\r\n\r\n /**\r\n * Handle video configuration updates (including disconnection and resize)\r\n */\r\n public handleVideoConfigUpdate(data: {\r\n targetFrameRate?: number;\r\n cvFrameRate?: { mode: CVFrameRateMode; sceneTargetFPS: number };\r\n width?: number;\r\n height?: number;\r\n disconnect?: boolean;\r\n timestamp: number;\r\n }): void {\r\n try {\r\n // Handle disconnection\r\n if (data.disconnect) {\r\n this.disconnectVideo();\r\n return;\r\n }\r\n \r\n // Handle resize\r\n if (data.width && data.height && this.offscreenCanvas) {\r\n this.resizeCanvas(data.width, data.height);\r\n }\r\n \r\n // Update processing configuration if provided\r\n if (data.targetFrameRate) {\r\n this.updateProcessingConfig(data.targetFrameRate);\r\n }\r\n \r\n // Phase 11 - CV frame rate configuration\r\n if (data.cvFrameRate) {\r\n this.updateCVFrameRate(data.cvFrameRate);\r\n }\r\n } catch (error) {\r\n console.error('Error handling video config update:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Resize the OffscreenCanvas (when video dimensions change)\r\n */\r\n private resizeCanvas(width: number, height: number): void {\r\n if (!this.offscreenCanvas) return;\r\n \r\n try {\r\n // Resize the OffscreenCanvas\r\n this.offscreenCanvas.width = width;\r\n this.offscreenCanvas.height = height;\r\n \r\n // Update state\r\n this.videoState.frameWidth = width;\r\n this.videoState.frameHeight = height;\r\n \r\n // Reset WebGL viewport if available\r\n if (this.gl) {\r\n this.gl.viewport(0, 0, width, height);\r\n }\r\n \r\n this.debugLog(`📐 OffscreenCanvas resized to ${width}x${height} (worker-side)`);\r\n \r\n } catch (error) {\r\n console.error('Error resizing OffscreenCanvas:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Disconnect video and clean up resources\r\n */\r\n private disconnectVideo(): void {\r\n // ✅ Clear the OffscreenCanvas before disconnecting\r\n if (this.offscreenCanvas && this.ctx) {\r\n this.ctx.clearRect(0, 0, this.offscreenCanvas.width, this.offscreenCanvas.height);\r\n this.debugLog('🧹 Cleared OffscreenCanvas on disconnect');\r\n }\r\n \r\n // Clear canvas references\r\n this.offscreenCanvas = null;\r\n this.ctx = null;\r\n this.gl = null;\r\n \r\n // Update state\r\n this.videoState.isConnected = false;\r\n this.videoState.currentFrame = null;\r\n this.videoState.frameWidth = 0;\r\n this.videoState.frameHeight = 0;\r\n this.videoState.frameRate = 0;\r\n this.videoState.frameData = null;\r\n \r\n // Reset CV scratch resources\r\n this.cvScratchCanvas = null;\r\n this.cvScratchContext = null;\r\n \r\n // Note: Don't cleanup CVSystem here as it should persist across video stream changes\r\n this.hasLoggedFirstFrame = false;\r\n this.frameCount = 0;\r\n \r\n this.debugLog('Video disconnected (worker-side)');\r\n }\r\n\r\n /**\r\n * Update video processing configuration\r\n */\r\n private updateProcessingConfig(targetFrameRate: number): void {\r\n this.targetFrameRate = Math.max(1, Math.min(60, targetFrameRate)); // Clamp between 1-60 FPS\r\n this.frameInterval = 1000 / this.targetFrameRate;\r\n \r\n this.debugLog(`Video processing frame rate updated to ${this.targetFrameRate} FPS (worker-side)`);\r\n }\r\n\r\n /**\r\n * Phase 11 - Update CV frame rate configuration\r\n */\r\n private updateCVFrameRate(cvFrameRate: { mode: CVFrameRateMode; sceneTargetFPS: number }): void {\r\n this.cvSystem.updateCVFrameRate(cvFrameRate.mode, cvFrameRate.sceneTargetFPS);\r\n this.debugLog(`CV frame rate updated to ${cvFrameRate.mode} of ${cvFrameRate.sceneTargetFPS} FPS (worker-side)`);\r\n }\r\n\r\n /**\r\n * Reset all video state (called when loading new scene)\r\n */\r\n public resetVideoState(): void {\r\n this.disconnectVideo();\r\n // Cleanup CV system\r\n if (this.cvSystem) {\r\n this.cvSystem.cleanup();\r\n }\r\n }\r\n\r\n /**\r\n * Get current processing configuration\r\n */\r\n public getProcessingConfig(): { targetFrameRate: number; frameInterval: number; frameCount: number } {\r\n return {\r\n targetFrameRate: this.targetFrameRate,\r\n frameInterval: this.frameInterval,\r\n frameCount: this.frameCount\r\n };\r\n }\r\n\r\n /**\r\n * Get WebGL context for advanced effects (if available)\r\n */\r\n public getWebGLContext(): WebGLRenderingContext | WebGL2RenderingContext | null {\r\n return this.gl;\r\n }\r\n\r\n /**\r\n * ✅ WORKER API: Artists can access the OffscreenCanvas directly for custom effects\r\n */\r\n public getCanvasForArtistEffects(): OffscreenCanvas | null {\r\n return this.offscreenCanvas;\r\n }\r\n\r\n /**\r\n * Get CV processing statistics\r\n */\r\n public getCVStats() {\r\n return this.cvSystem.getStats();\r\n }\r\n\r\n /**\r\n * Initialize for direct frame injection (no MediaStream)\r\n * Enables GPU-only mode for zero-copy pipeline (ImageBitmaps are pre-flipped at capture)\r\n */\r\n public initializeForDirectFrames(consumerRendererType?: string): void {\r\n this.disconnectVideo();\r\n this.streamType = 'directFrame';\r\n \r\n // Enable GPU-only mode for all shader consumers\r\n // ImageBitmaps are created with flipY at capture, so orientation is correct\r\n this.directGPUMode = consumerRendererType === 'shader';\r\n \r\n if (this.directGPUMode) {\r\n this.debugLog('VideoSystem initialized in direct GPU mode (zero-copy, pre-flipped ImageBitmaps)');\r\n } else {\r\n // P5/Canvas consumer - need OffscreenCanvas\r\n this.offscreenCanvas = new OffscreenCanvas(1920, 1080);\r\n this.ctx = this.offscreenCanvas.getContext('2d', { willReadFrequently: true });\r\n \r\n if (!this.ctx) {\r\n throw new Error('Failed to get 2D context for direct frames');\r\n }\r\n \r\n this.videoState.currentFrame = this.offscreenCanvas;\r\n this.debugLog('VideoSystem initialized with canvas (P5/Canvas consumer)');\r\n }\r\n \r\n this.videoState.isConnected = false;\r\n }\r\n\r\n /**\r\n * Handle directly injected frame (zero-copy)\r\n */\r\n public handleDirectFrame(data: {\r\n imageBitmap: ImageBitmap;\r\n streamIndex: number;\r\n timestamp: number;\r\n }): void {\r\n if (this.directGPUMode) {\r\n // 🚀 ZERO-COPY PATH: Store pre-flipped ImageBitmap directly for GPU-to-GPU transfer\r\n // No canvas, no CPU memory, no copies - just GPU texture handle ownership transfer\r\n \r\n // Close previous unconsumed frame to prevent GPU memory leak\r\n // (can happen if frames arrive faster than the render loop consumes them)\r\n if (this.videoState.currentFrame instanceof ImageBitmap) {\r\n this.videoState.currentFrame.close();\r\n }\r\n this.videoState.currentFrame = data.imageBitmap;\r\n this.videoState.frameWidth = data.imageBitmap.width;\r\n this.videoState.frameHeight = data.imageBitmap.height;\r\n this.videoState.isConnected = true;\r\n \r\n // Don't close bitmap here - ShaderWorkerAdapter will close it after gl.texImage2D()\r\n // This ensures the GPU texture stays alive until WebGL upload is complete\r\n } else {\r\n // Original canvas path (for CV/P5 - requires CPU access)\r\n if (!this.offscreenCanvas || !this.ctx) {\r\n this.debugLog('[Compositor] Initializing canvas for direct frames');\r\n this.offscreenCanvas = new OffscreenCanvas(data.imageBitmap.width, data.imageBitmap.height);\r\n this.ctx = this.offscreenCanvas.getContext('2d', { willReadFrequently: true });\r\n }\r\n \r\n // Resize canvas if needed\r\n if (this.offscreenCanvas!.width !== data.imageBitmap.width ||\r\n this.offscreenCanvas!.height !== data.imageBitmap.height) {\r\n this.offscreenCanvas!.width = data.imageBitmap.width;\r\n this.offscreenCanvas!.height = data.imageBitmap.height;\r\n }\r\n \r\n // Draw bitmap to canvas for CPU processing\r\n this.ctx!.drawImage(data.imageBitmap, 0, 0);\r\n this.videoState.currentFrame = this.offscreenCanvas;\r\n this.videoState.frameWidth = data.imageBitmap.width;\r\n this.videoState.frameHeight = data.imageBitmap.height;\r\n this.videoState.isConnected = true;\r\n \r\n this.processCurrentFrame(data.timestamp);\r\n data.imageBitmap.close();\r\n }\r\n }\r\n} ","/**\r\n * P5.js Worker Adapter\r\n * \r\n * Integrates P5.js into Viji's worker-based rendering system.\r\n * Provides minimal DOM shimming and manages P5 instance lifecycle.\r\n */\r\n\r\n/**\r\n * Scene code structure for P5 mode\r\n */\r\ninterface P5SceneCode {\r\n setup?: ((viji: any, p5: any) => void) | null;\r\n render: (viji: any, p5: any) => void;\r\n}\r\n\r\nexport class P5WorkerAdapter {\r\n private p5Instance: any = null;\r\n private setupFn: ((viji: any, p5: any) => void) | null = null;\r\n private renderFn: ((viji: any, p5: any) => void) | null = null;\r\n private p5InternalSetupComplete = false;\r\n private artistSetupComplete = false;\r\n private p5Class: any = null;\r\n \r\n // Cache for converted P5.Image objects\r\n private imageParameterCache = new Map<string, { source: any, p5Image: any }>();\r\n \r\n // Track if P5.js's main canvas has been created\r\n private mainCanvasCreated = false;\r\n \r\n constructor(\r\n private offscreenCanvas: OffscreenCanvas,\r\n _vijiAPI: any,\r\n sceneCode: P5SceneCode\r\n ) {\r\n this.setupFn = sceneCode.setup || null;\r\n this.renderFn = sceneCode.render;\r\n \r\n // Install minimal DOM shims before loading P5\r\n this.installMinimalShims();\r\n \r\n // Note: P5 will be loaded dynamically when this adapter is created\r\n // We'll initialize it after P5 is imported\r\n }\r\n \r\n /**\r\n * Initialize P5 instance after P5.js library is loaded\r\n * This must be called after the P5 class is available\r\n */\r\n public async init(): Promise<void> {\r\n try {\r\n // Dynamically import P5.js from ESM-compatible CDN (lazy-loaded, not bundled)\r\n // esm.sh provides proper ES module versions of npm packages\r\n // @ts-expect-error - CDN URL import, types provided by @types/p5\r\n const p5Module = await import('https://esm.sh/p5@1.9.4');\r\n this.p5Class = p5Module.default || p5Module;\r\n \r\n // Create a promise that resolves when P5's setup completes\r\n const setupPromise = new Promise<void>((resolve) => {\r\n // Create P5 instance in instance mode\r\n new this.p5Class((p: any) => {\r\n // Capture the P5 instance from the callback parameter\r\n this.p5Instance = p;\r\n \r\n // P5 sketch setup\r\n p.setup = () => {\r\n // Initialize P5 renderer using our OffscreenCanvas via the shimmed document\r\n p.createCanvas(this.offscreenCanvas.width, this.offscreenCanvas.height);\r\n \r\n // Disable P5's automatic loop (Viji controls the render loop)\r\n p.noLoop();\r\n \r\n // Mark that P5's internal setup is complete\r\n this.p5InternalSetupComplete = true;\r\n \r\n // Resolve the promise\r\n resolve();\r\n };\r\n \r\n // Empty draw - we'll call the artist's render function manually\r\n p.draw = () => {};\r\n \r\n // IMPORTANT: In worker environment, P5 doesn't auto-call setup\r\n // We need to manually trigger it\r\n setTimeout(() => {\r\n if (p.setup && typeof p.setup === 'function') {\r\n try {\r\n p.setup();\r\n } catch (setupError) {\r\n console.error('P5 setup failed:', setupError);\r\n resolve(); // Resolve anyway to prevent hanging\r\n }\r\n }\r\n }, 0);\r\n });\r\n });\r\n \r\n // Wait for P5's setup to actually complete\r\n await setupPromise;\r\n } catch (error) {\r\n console.error('Failed to initialize P5.js:', error);\r\n throw error;\r\n }\r\n }\r\n \r\n /**\r\n * Install minimal DOM shims that P5.js needs for rendering\r\n */\r\n private installMinimalShims(): void {\r\n const self = globalThis as any;\r\n \r\n // Only install if not already present\r\n if (typeof self.document === 'undefined') {\r\n // Create flexible style proxy that accepts any property\r\n const createStyleProxy = () => new Proxy({}, {\r\n get: () => '',\r\n set: () => true\r\n });\r\n\r\n // Create body element first so canvas can reference it\r\n const bodyElement: any = {\r\n style: createStyleProxy(),\r\n appendChild: () => {},\r\n removeChild: () => {},\r\n children: [],\r\n childNodes: [],\r\n firstChild: null,\r\n lastChild: null,\r\n parentNode: null,\r\n ownerDocument: undefined, // Will be set after document is created\r\n setAttribute: () => {},\r\n getAttribute: () => null,\r\n addEventListener: () => {},\r\n removeEventListener: () => {},\r\n tagName: 'BODY'\r\n };\r\n\r\n // Minimal document shim\r\n self.document = {\r\n createElement: (tag: string) => {\r\n if (tag === 'canvas') {\r\n // For the FIRST canvas (P5.js's main canvas), return our provided OffscreenCanvas\r\n // For subsequent canvases (e.g., tint operations), create new ones\r\n let canvas: OffscreenCanvas;\r\n if (!this.mainCanvasCreated) {\r\n canvas = this.offscreenCanvas;\r\n this.mainCanvasCreated = true;\r\n } else {\r\n canvas = new OffscreenCanvas(300, 300); // Default size, P5.js will resize as needed\r\n }\r\n \r\n // Add DOM-like properties that P5.js may check for\r\n // @ts-ignore - Adding properties to OffscreenCanvas\r\n canvas.style = createStyleProxy();\r\n // @ts-ignore\r\n canvas.dataset = new Proxy({}, {\r\n get: () => undefined,\r\n set: () => true\r\n });\r\n // @ts-ignore\r\n canvas.classList = {\r\n add: () => {},\r\n remove: () => {},\r\n contains: () => false,\r\n toggle: () => false\r\n };\r\n // @ts-ignore\r\n canvas.getBoundingClientRect = () => ({ \r\n left: 0, \r\n top: 0, \r\n width: canvas.width, \r\n height: canvas.height \r\n });\r\n // Return the actual OffscreenCanvas (now with extra properties)\r\n // This allows it to be used directly with drawImage()\r\n return canvas;\r\n }\r\n // Return stub for other elements\r\n return {\r\n style: createStyleProxy(),\r\n appendChild: () => {},\r\n removeChild: () => {},\r\n setAttribute: () => {},\r\n getAttribute: () => null,\r\n tagName: tag.toUpperCase(),\r\n addEventListener: () => {},\r\n removeEventListener: () => {}\r\n };\r\n },\r\n createElementNS: (_ns: string, tag: string) => {\r\n return self.document.createElement(tag);\r\n },\r\n body: bodyElement,\r\n documentElement: {\r\n style: createStyleProxy(),\r\n children: [],\r\n childNodes: []\r\n },\r\n getElementById: () => null,\r\n querySelector: () => null,\r\n querySelectorAll: () => [],\r\n getElementsByTagName: (tagName: string) => {\r\n // P5.js looks for 'main' elements to append canvas\r\n if (tagName.toLowerCase() === 'main') {\r\n return [bodyElement]; // Return body as main container\r\n }\r\n return [];\r\n },\r\n addEventListener: () => {},\r\n removeEventListener: () => {},\r\n hasFocus: () => true // P5.js checks this for accessibility features\r\n };\r\n \r\n // Set bodyElement.ownerDocument now that document exists\r\n bodyElement.ownerDocument = self.document;\r\n }\r\n \r\n if (typeof self.window === 'undefined') {\r\n // Minimal window shim\r\n self.window = {\r\n devicePixelRatio: 1,\r\n innerWidth: this.offscreenCanvas.width,\r\n innerHeight: this.offscreenCanvas.height,\r\n addEventListener: () => {},\r\n removeEventListener: () => {},\r\n requestAnimationFrame: (_callback: Function) => {\r\n // We control the loop, so this should not be called\r\n return 0;\r\n },\r\n cancelAnimationFrame: () => {},\r\n setTimeout: self.setTimeout.bind(self),\r\n clearTimeout: self.clearTimeout.bind(self),\r\n setInterval: self.setInterval.bind(self),\r\n clearInterval: self.clearInterval.bind(self),\r\n performance: self.performance,\r\n console: self.console,\r\n Math: self.Math,\r\n Date: self.Date,\r\n Array: self.Array,\r\n Object: self.Object\r\n };\r\n }\r\n \r\n if (typeof self.navigator === 'undefined') {\r\n // Minimal navigator shim\r\n self.navigator = {\r\n userAgent: 'Viji-Worker-P5',\r\n platform: 'Worker',\r\n language: 'en-US'\r\n };\r\n }\r\n \r\n if (typeof self.screen === 'undefined') {\r\n // Minimal screen shim for P5.js display metrics\r\n self.screen = {\r\n width: this.offscreenCanvas.width,\r\n height: this.offscreenCanvas.height,\r\n availWidth: this.offscreenCanvas.width,\r\n availHeight: this.offscreenCanvas.height,\r\n colorDepth: 24,\r\n pixelDepth: 24\r\n };\r\n }\r\n \r\n if (typeof self.HTMLCanvasElement === 'undefined') {\r\n // P5.js checks instanceof HTMLCanvasElement\r\n // Create a minimal constructor that OffscreenCanvas \"instanceof\" will pass\r\n self.HTMLCanvasElement = function() {} as any;\r\n // Make OffscreenCanvas instances appear to be HTMLCanvasElement instances\r\n Object.setPrototypeOf(OffscreenCanvas.prototype, self.HTMLCanvasElement.prototype);\r\n }\r\n }\r\n \r\n /**\r\n * Convert ImageBitmap to a P5.js-compatible image object (with caching)\r\n * Returns an object that mimics P5.Image structure for P5.js's image() function\r\n */\r\n private getOrCreateP5Image(cacheKey: string, source: any): any {\r\n if (!this.p5Instance) return null;\r\n \r\n // Check cache first\r\n const cached = this.imageParameterCache.get(cacheKey);\r\n if (cached && cached.source === source) {\r\n return cached.p5Image;\r\n }\r\n \r\n try {\r\n // Create an OffscreenCanvas and draw the ImageBitmap to it\r\n const offscreenCanvas = new OffscreenCanvas(source.width, source.height);\r\n const ctx = offscreenCanvas.getContext('2d');\r\n if (!ctx) {\r\n throw new Error('Failed to get 2d context from OffscreenCanvas');\r\n }\r\n ctx.drawImage(source, 0, 0);\r\n \r\n // Wrap the OffscreenCanvas in a P5.Image-like object\r\n // P5.js expects: img.canvas or img.elt (the actual canvas), and img.width/img.height (logical dimensions)\r\n const p5ImageWrapper = {\r\n canvas: offscreenCanvas, // P5.js looks for img.canvas || img.elt\r\n elt: offscreenCanvas, // Fallback for compatibility\r\n width: source.width, // Logical width\r\n height: source.height // Logical height\r\n };\r\n \r\n // Cache the conversion\r\n this.imageParameterCache.set(cacheKey, { source, p5Image: p5ImageWrapper });\r\n \r\n return p5ImageWrapper;\r\n } catch (error) {\r\n console.warn('Failed to convert image to P5-compatible object:', error);\r\n return null;\r\n }\r\n }\r\n \r\n /**\r\n * Wrap video frames in P5.js-compatible format\r\n * P5.js expects images to have {canvas, elt, width, height} structure\r\n * This wrapping is done per-frame for P5 scenes only, keeping the artist API unchanged\r\n */\r\n private wrapVideoFramesForP5(vijiAPI: any): void {\r\n // Wrap main video stream if present\r\n if (vijiAPI.video?.currentFrame instanceof OffscreenCanvas) {\r\n const canvas = vijiAPI.video.currentFrame;\r\n vijiAPI.video.currentFrame = {\r\n canvas: canvas,\r\n elt: canvas,\r\n width: canvas.width,\r\n height: canvas.height\r\n };\r\n } else if (vijiAPI.video?.currentFrame instanceof ImageBitmap) {\r\n // P5.js can draw ImageBitmap directly with p5.image()\r\n const bitmap = vijiAPI.video.currentFrame;\r\n vijiAPI.video.currentFrame = {\r\n elt: bitmap,\r\n width: bitmap.width,\r\n height: bitmap.height\r\n };\r\n }\r\n \r\n // Wrap all streams\r\n if (Array.isArray(vijiAPI.streams)) {\r\n for (const stream of vijiAPI.streams) {\r\n if (stream?.currentFrame instanceof OffscreenCanvas) {\r\n const canvas = stream.currentFrame;\r\n stream.currentFrame = {\r\n canvas: canvas,\r\n elt: canvas,\r\n width: canvas.width,\r\n height: canvas.height\r\n };\r\n } else if (stream?.currentFrame instanceof ImageBitmap) {\r\n // P5.js can draw ImageBitmap directly with p5.image()\r\n const bitmap = stream.currentFrame;\r\n stream.currentFrame = {\r\n elt: bitmap,\r\n width: bitmap.width,\r\n height: bitmap.height\r\n };\r\n }\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Add .p5 property to image parameters for P5.js-specific rendering\r\n * This allows artists to use p5.image() while keeping .value for native canvas API\r\n * @param parameterObjects Map of parameter name to parameter object from ParameterSystem\r\n */\r\n private addP5PropertyToImageParameters(parameterObjects: Map<string, any>): void {\r\n if (!this.p5Instance) return;\r\n \r\n // Function to check if a value is an image-like object\r\n const isImageLike = (value: any): boolean => {\r\n return value instanceof ImageBitmap || \r\n value instanceof OffscreenCanvas ||\r\n (value && typeof value === 'object' && 'width' in value && 'height' in value);\r\n };\r\n \r\n // Iterate through parameter objects provided by ParameterSystem\r\n for (const [name, param] of parameterObjects) {\r\n try {\r\n // Check if this parameter has an image value\r\n if (param && typeof param === 'object' && 'value' in param) {\r\n const value = param.value;\r\n \r\n // If the value is an image-like object and doesn't have .p5 yet\r\n if (value && isImageLike(value) && !('p5' in param)) {\r\n // Add lazy .p5 getter that converts on-demand\r\n Object.defineProperty(param, 'p5', {\r\n get: () => this.getOrCreateP5Image(name, param.value),\r\n enumerable: true,\r\n configurable: true\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.warn(`Failed to add .p5 property to parameter '${name}':`, error);\r\n continue;\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Execute one frame of the P5 scene\r\n * Called by Viji's render loop\r\n * @param vijiAPI The Viji API object passed to artist code\r\n * @param parameterObjects Map of parameter objects from ParameterSystem\r\n */\r\n public tick(vijiAPI: any, parameterObjects: Map<string, any>): void {\r\n if (!this.p5Instance || !this.p5InternalSetupComplete) {\r\n // P5 not ready yet, skip this frame\r\n return;\r\n }\r\n \r\n try {\r\n // Add .p5 property to image parameters (lazy, cached conversion)\r\n this.addP5PropertyToImageParameters(parameterObjects);\r\n \r\n // Wrap video frames for P5.js compatibility (per-frame, only for P5 scenes)\r\n this.wrapVideoFramesForP5(vijiAPI);\r\n \r\n // Run artist's setup once\r\n if (!this.artistSetupComplete && this.setupFn) {\r\n this.setupFn(vijiAPI, this.p5Instance);\r\n this.artistSetupComplete = true;\r\n }\r\n \r\n // Update P5's internal frame count\r\n if (this.p5Instance._setProperty) {\r\n this.p5Instance._setProperty('frameCount', this.p5Instance.frameCount + 1);\r\n }\r\n \r\n // Call artist's render function with both Viji and P5 APIs\r\n if (this.renderFn) {\r\n this.renderFn(vijiAPI, this.p5Instance);\r\n }\r\n } catch (error) {\r\n console.error('P5 render error:', error);\r\n throw error;\r\n }\r\n }\r\n \r\n /**\r\n * Handle canvas resize\r\n */\r\n public resize(width: number, height: number): void {\r\n if (!this.p5Instance) return;\r\n \r\n // Update P5's internal dimensions\r\n this.p5Instance._setProperty('width', width);\r\n this.p5Instance._setProperty('height', height);\r\n this.p5Instance._setProperty('_width', width);\r\n this.p5Instance._setProperty('_height', height);\r\n \r\n // Update renderer dimensions if available\r\n if (this.p5Instance._renderer) {\r\n this.p5Instance._renderer.width = width;\r\n this.p5Instance._renderer.height = height;\r\n }\r\n \r\n // Call P5's resizeCanvas if available\r\n if (typeof this.p5Instance.resizeCanvas === 'function') {\r\n try {\r\n this.p5Instance.resizeCanvas(width, height, true);\r\n } catch (error) {\r\n // Ignore resize errors, they're often not critical\r\n console.warn('P5 resize warning:', error);\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Cleanup P5 instance\r\n */\r\n public destroy(): void {\r\n if (this.p5Instance) {\r\n try {\r\n if (typeof this.p5Instance.remove === 'function') {\r\n this.p5Instance.remove();\r\n }\r\n } catch (error) {\r\n console.warn('P5 cleanup warning:', error);\r\n }\r\n this.p5Instance = null;\r\n }\r\n \r\n this.setupFn = null;\r\n this.renderFn = null;\r\n this.p5InternalSetupComplete = false;\r\n this.artistSetupComplete = false;\r\n }\r\n}\r\n\r\n","/**\r\n * Shader Parameter Parser\r\n * \r\n * Parses parameter declarations from GLSL shader code comments.\r\n * Supports syntax: // @viji-TYPE:uniformName key:value key:value ...\r\n */\r\n\r\nexport interface ShaderParameterDefinition {\r\n type: string;\r\n uniformName: string;\r\n label: string;\r\n default: any;\r\n config: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Parses shader parameter declarations from GLSL comments\r\n */\r\nexport class ShaderParameterParser {\r\n /**\r\n * Parse all parameter declarations from shader code\r\n */\r\n static parseParameters(shaderCode: string): ShaderParameterDefinition[] {\r\n const parameters: ShaderParameterDefinition[] = [];\r\n const lines = shaderCode.split('\\n');\r\n \r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n \r\n // Match: // @viji-TYPE:uniformName key:value ...\r\n const match = trimmed.match(/\\/\\/\\s*@viji-(\\w+):(\\w+)\\s+(.+)/);\r\n \r\n if (match) {\r\n const [, type, uniformName, configStr] = match;\r\n \r\n try {\r\n const config = this.parseKeyValuePairs(configStr);\r\n \r\n const param: ShaderParameterDefinition = {\r\n type,\r\n uniformName,\r\n label: config.label || uniformName,\r\n default: config.default,\r\n config\r\n };\r\n \r\n this.validateParameter(param);\r\n parameters.push(param);\r\n } catch (error) {\r\n console.warn(`Failed to parse shader parameter: ${line}`, error);\r\n }\r\n }\r\n }\r\n \r\n this.crossValidateAccumulators(parameters);\r\n return parameters;\r\n }\r\n \r\n /**\r\n * Parse key:value pairs from configuration string\r\n */\r\n static parseKeyValuePairs(configStr: string): Record<string, any> {\r\n const config: Record<string, any> = {};\r\n \r\n // Regex to match key:\"value\" or key:value or key:[\"a\",\"b\",\"c\"] or key:#hexcolor\r\n const keyValueRegex = /(\\w+):((?:\"[^\"]*\"|\\[[^\\]]*\\]|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{3}|[^\\s]+))/g;\r\n \r\n let match;\r\n while ((match = keyValueRegex.exec(configStr)) !== null) {\r\n const [, key, value] = match;\r\n config[key] = this.parseValue(value);\r\n }\r\n \r\n return config;\r\n }\r\n \r\n /**\r\n * Parse individual value from string\r\n */\r\n private static parseValue(value: string): any {\r\n // Handle quoted strings: \"Hello World\"\r\n if (value.startsWith('\"') && value.endsWith('\"')) {\r\n return value.slice(1, -1);\r\n }\r\n \r\n // Handle arrays: [\"Option1\",\"Option2\"]\r\n if (value.startsWith('[') && value.endsWith(']')) {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n // If JSON parse fails, try manual parsing\r\n const items = value.slice(1, -1).split(',').map(s => s.trim());\r\n return items.map(item => {\r\n if (item.startsWith('\"') && item.endsWith('\"')) {\r\n return item.slice(1, -1);\r\n }\r\n const num = parseFloat(item);\r\n return isNaN(num) ? item : num;\r\n });\r\n }\r\n }\r\n \r\n // Handle hex colors: #ff0000 or #fff\r\n if (value.startsWith('#')) {\r\n return value;\r\n }\r\n \r\n // Handle booleans\r\n if (value === 'true') return true;\r\n if (value === 'false') return false;\r\n \r\n // Handle numbers\r\n const num = parseFloat(value);\r\n if (!isNaN(num)) return num;\r\n \r\n // Return as string\r\n return value;\r\n }\r\n \r\n /**\r\n * Validate parameter definition\r\n */\r\n static validateParameter(param: ShaderParameterDefinition): void {\r\n // Required fields\r\n if (!param.type) {\r\n throw new Error('Parameter type is required');\r\n }\r\n \r\n if (!param.uniformName) {\r\n throw new Error('Parameter uniformName is required');\r\n }\r\n \r\n if (param.type !== 'accumulator' && !param.config.label) {\r\n throw new Error(`Parameter ${param.uniformName} missing required 'label' key`);\r\n }\r\n \r\n // Validate by type\r\n switch (param.type) {\r\n case 'slider':\r\n case 'number':\r\n if (param.config.default === undefined) {\r\n throw new Error(`Parameter ${param.uniformName} of type ${param.type} missing required 'default' key`);\r\n }\r\n break;\r\n \r\n case 'color':\r\n if (param.config.default === undefined) {\r\n throw new Error(`Parameter ${param.uniformName} of type 'color' missing required 'default' key`);\r\n }\r\n if (!param.config.default.startsWith('#')) {\r\n throw new Error(`Parameter ${param.uniformName} of type 'color' default must be hex color (e.g., #ff0000)`);\r\n }\r\n break;\r\n \r\n case 'toggle':\r\n if (param.config.default === undefined) {\r\n throw new Error(`Parameter ${param.uniformName} of type 'toggle' missing required 'default' key`);\r\n }\r\n if (typeof param.config.default !== 'boolean') {\r\n throw new Error(`Parameter ${param.uniformName} of type 'toggle' default must be boolean (true or false)`);\r\n }\r\n break;\r\n \r\n case 'select':\r\n if (param.config.default === undefined) {\r\n throw new Error(`Parameter ${param.uniformName} of type 'select' missing required 'default' key`);\r\n }\r\n if (!param.config.options || !Array.isArray(param.config.options)) {\r\n throw new Error(`Parameter ${param.uniformName} of type 'select' missing required 'options' key (array)`);\r\n }\r\n break;\r\n \r\n case 'image':\r\n break;\r\n \r\n case 'accumulator':\r\n if (param.config.rate === undefined) {\r\n throw new Error(`Accumulator '${param.uniformName}' requires a 'rate' config key (parameter name or numeric constant)`);\r\n }\r\n if (typeof param.config.rate !== 'string' && typeof param.config.rate !== 'number') {\r\n throw new Error(`Accumulator '${param.uniformName}' rate must be a parameter name or numeric constant`);\r\n }\r\n if (typeof param.config.rate === 'string' && param.config.rate.startsWith('u_')) {\r\n throw new Error(`Accumulator '${param.uniformName}' cannot reference built-in uniform '${param.config.rate}' — use a parameter name`);\r\n }\r\n break;\r\n \r\n default:\r\n console.warn(`Unknown parameter type: ${param.type}`);\r\n }\r\n \r\n // Warn if using reserved u_ prefix\r\n if (param.uniformName.startsWith('u_')) {\r\n console.warn(`Parameter name \"${param.uniformName}\" uses reserved prefix \"u_\". Consider renaming to avoid conflicts with built-in uniforms.`);\r\n }\r\n }\r\n \r\n /**\r\n * Generate uniform declaration for a parameter\r\n */\r\n static generateUniformDeclaration(param: ShaderParameterDefinition): string {\r\n switch (param.type) {\r\n case 'slider':\r\n case 'number':\r\n return `uniform float ${param.uniformName};`;\r\n \r\n case 'color':\r\n return `uniform vec3 ${param.uniformName};`;\r\n \r\n case 'toggle':\r\n return `uniform bool ${param.uniformName};`;\r\n \r\n case 'select':\r\n return `uniform int ${param.uniformName};`;\r\n \r\n case 'image':\r\n return `uniform sampler2D ${param.uniformName};`;\r\n \r\n case 'accumulator':\r\n return `uniform float ${param.uniformName}; // accumulator (rate: ${param.config.rate})`;\r\n \r\n default:\r\n return `// Unknown parameter type: ${param.type}`;\r\n }\r\n }\r\n \r\n /**\r\n * Cross-validate accumulator references after all parameters are parsed.\r\n * Accumulators that reference non-existent parameters get a warning\r\n * but remain in the list so their uniform is still generated.\r\n */\r\n private static crossValidateAccumulators(parameters: ShaderParameterDefinition[]): void {\r\n const paramNames = new Set(\r\n parameters.filter(p => p.type !== 'accumulator').map(p => p.uniformName)\r\n );\r\n \r\n for (const param of parameters) {\r\n if (param.type !== 'accumulator') continue;\r\n const rate = param.config.rate;\r\n if (typeof rate === 'string' && !paramNames.has(rate)) {\r\n const available = [...paramNames].join(', ');\r\n console.warn(\r\n `Accumulator '${param.uniformName}' references parameter '${rate}' which does not exist.` +\r\n (available ? ` Available parameters: ${available}` : ' No parameters declared.')\r\n );\r\n param.config._rateInvalid = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\n","/**\r\n * Shader Worker Adapter\r\n * \r\n * Integrates GLSL shaders into Viji's worker-based rendering system.\r\n * Provides automatic uniform injection and parameter management.\r\n */\r\n\r\nimport { ShaderParameterParser, ShaderParameterDefinition } from './ShaderParameterParser.js';\r\n\r\nexport class ShaderWorkerAdapter {\r\n private static readonly MAX_STREAMS = 8; // Maximum number of compositor input streams\r\n private static readonly MAX_EXTERNAL_DEVICES = 8; // Maximum number of external devices\r\n private static readonly MAX_DEVICE_VIDEOS = 8; // Maximum number of device video streams\r\n \r\n private gl: WebGLRenderingContext | WebGL2RenderingContext;\r\n private program: WebGLProgram | null = null;\r\n private uniformLocations = new Map<string, WebGLUniformLocation | null>();\r\n private textureUnits = new Map<string, number>();\r\n private nextTextureUnit = 0;\r\n private textures = new Map<string, WebGLTexture>();\r\n \r\n // Fullscreen quad\r\n private quadBuffer: WebGLBuffer | null = null;\r\n \r\n // Parameter definitions\r\n private parameters: ShaderParameterDefinition[] = [];\r\n \r\n // GLSL version detection\r\n private glslVersion: 'glsl100' | 'glsl300' = 'glsl100';\r\n \r\n // Audio textures\r\n private audioFFTTexture: WebGLTexture | null = null;\r\n private audioWaveformTexture: WebGLTexture | null = null;\r\n private videoTexture: WebGLTexture | null = null;\r\n private segmentationTexture: WebGLTexture | null = null;\r\n \r\n // Multi-stream textures\r\n private streamTextures: (WebGLTexture | null)[] = [];\r\n \r\n // Device video textures\r\n private deviceTextures: (WebGLTexture | null)[] = new Array(ShaderWorkerAdapter.MAX_DEVICE_VIDEOS).fill(null);\r\n \r\n // Accumulator state (CPU-side phase accumulators for smooth parameter-driven animation)\r\n private accumulatorValues = new Map<string, number>();\r\n private accumulatorWarned = new Set<string>();\r\n \r\n // Backbuffer support (ping-pong framebuffers)\r\n private backbufferFramebuffer: WebGLFramebuffer | null = null;\r\n private backbufferTexture: WebGLTexture | null = null;\r\n private currentFramebuffer: WebGLFramebuffer | null = null;\r\n private currentTexture: WebGLTexture | null = null;\r\n private backbufferEnabled: boolean = false;\r\n \r\n constructor(\r\n offscreenCanvas: OffscreenCanvas,\r\n _vijiAPI: any,\r\n private shaderCode: string\r\n ) {\r\n // Detect GLSL version\r\n this.glslVersion = this.detectGLSLVersion(shaderCode);\r\n \r\n // Detect if shader uses backbuffer\r\n this.backbufferEnabled = shaderCode.includes('backbuffer');\r\n \r\n // Get appropriate WebGL context\r\n if (this.glslVersion === 'glsl300') {\r\n const gl = offscreenCanvas.getContext('webgl2');\r\n if (!gl) {\r\n throw new Error('WebGL 2 not supported. Use GLSL ES 1.00 syntax instead.');\r\n }\r\n this.gl = gl;\r\n } else {\r\n const gl = offscreenCanvas.getContext('webgl');\r\n if (!gl) {\r\n throw new Error('WebGL not supported');\r\n }\r\n this.gl = gl;\r\n }\r\n }\r\n \r\n /**\r\n * Initialize the shader adapter\r\n */\r\n public async init(): Promise<void> {\r\n try {\r\n // Parse parameters from shader code\r\n this.parameters = ShaderParameterParser.parseParameters(this.shaderCode);\r\n \r\n // Initialize accumulators with default values\r\n for (const param of this.parameters) {\r\n if (param.type === 'accumulator') {\r\n this.accumulatorValues.set(param.uniformName, param.config.default ?? 0);\r\n }\r\n }\r\n \r\n // Create fullscreen quad\r\n this.createFullscreenQuad();\r\n \r\n // Inject uniforms and compile shader\r\n const processedCode = this.injectUniforms(this.shaderCode);\r\n this.compileAndLinkShader(processedCode);\r\n \r\n // Get all uniform locations\r\n this.cacheUniformLocations();\r\n \r\n // Reserve texture units for special textures\r\n this.reserveTextureUnits();\r\n \r\n // Create backbuffer framebuffers if needed\r\n if (this.backbufferEnabled) {\r\n this.createBackbufferFramebuffers();\r\n }\r\n \r\n } catch (error) {\r\n console.error('Failed to initialize ShaderWorkerAdapter:', error);\r\n throw error;\r\n }\r\n }\r\n \r\n /**\r\n * Detect GLSL version from shader code\r\n */\r\n private detectGLSLVersion(code: string): 'glsl100' | 'glsl300' {\r\n return code.includes('#version 300') ? 'glsl300' : 'glsl100';\r\n }\r\n \r\n /**\r\n * Create fullscreen quad geometry\r\n */\r\n private createFullscreenQuad(): void {\r\n // Two triangles covering the full screen\r\n const vertices = new Float32Array([\r\n -1, -1, // Bottom-left\r\n 1, -1, // Bottom-right\r\n -1, 1, // Top-left\r\n 1, 1 // Top-right\r\n ]);\r\n \r\n this.quadBuffer = this.gl.createBuffer();\r\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.quadBuffer);\r\n this.gl.bufferData(this.gl.ARRAY_BUFFER, vertices, this.gl.STATIC_DRAW);\r\n }\r\n \r\n /**\r\n * Inject built-in and parameter uniforms into shader code\r\n */\r\n private injectUniforms(artistCode: string): string {\r\n // Extract #version directive if present (MUST be first line in GLSL ES 3.00)\r\n let versionLine = '';\r\n let codeWithoutVersion = artistCode;\r\n \r\n const lines = artistCode.split('\\n');\r\n for (let i = 0; i < lines.length; i++) {\r\n const trimmed = lines[i].trim();\r\n if (trimmed.startsWith('#version')) {\r\n versionLine = trimmed;\r\n // Remove this line from the code\r\n lines[i] = '';\r\n codeWithoutVersion = lines.join('\\n');\r\n break;\r\n }\r\n }\r\n \r\n // Find injection point in code (without #version)\r\n const injectionPoint = this.findInjectionPoint(codeWithoutVersion);\r\n \r\n // Build uniform declarations\r\n const builtInUniforms = this.getBuiltInUniforms();\r\n const parameterUniforms = this.parameters\r\n .map(p => ShaderParameterParser.generateUniformDeclaration(p))\r\n .join('\\n');\r\n \r\n // Check if shader uses fwidth (requires extension in WebGL 1)\r\n const usesFwidth = artistCode.includes('fwidth');\r\n \r\n // Check if extension is supported (for WebGL 1)\r\n if (usesFwidth && this.glslVersion === 'glsl100') {\r\n const ext = this.gl.getExtension('OES_standard_derivatives');\r\n if (!ext) {\r\n console.warn('Shader uses fwidth() but OES_standard_derivatives extension is not supported. Shader may not compile.');\r\n }\r\n }\r\n \r\n // Build injection parts\r\n const parts: string[] = [];\r\n \r\n // 1. Extensions MUST come first (before precision) - only for GLSL 1.00\r\n if (usesFwidth && this.glslVersion === 'glsl100') {\r\n parts.push('#extension GL_OES_standard_derivatives : enable');\r\n }\r\n \r\n // 2. Precision MUST come before uniforms (only for GLSL 1.00, ES 3.00 has it by default)\r\n if (this.glslVersion === 'glsl100') {\r\n parts.push('');\r\n parts.push('#ifdef GL_ES');\r\n parts.push('precision mediump float;');\r\n parts.push('#endif');\r\n } else {\r\n // For GLSL 3.00, just add precision\r\n parts.push('');\r\n parts.push('precision mediump float;');\r\n }\r\n \r\n // 3. Uniforms\r\n parts.push('');\r\n parts.push('// ===== VIJI AUTO-INJECTED UNIFORMS =====');\r\n parts.push('// Built-in uniforms (auto-provided)');\r\n parts.push(builtInUniforms);\r\n parts.push('');\r\n parts.push('// Parameter uniforms (from @viji-* declarations)');\r\n parts.push(parameterUniforms);\r\n parts.push('');\r\n parts.push('// ===== ARTIST CODE =====');\r\n \r\n const uniformBlock = parts.join('\\n');\r\n \r\n // Insert uniform block at injection point\r\n const codeWithUniforms = (\r\n codeWithoutVersion.slice(0, injectionPoint) +\r\n '\\n' + uniformBlock + '\\n' +\r\n codeWithoutVersion.slice(injectionPoint)\r\n );\r\n \r\n // Reconstruct: #version MUST be first line, then uniforms, then artist code\r\n const finalCode = versionLine\r\n ? versionLine + '\\n' + codeWithUniforms\r\n : codeWithUniforms;\r\n \r\n // Debug: Log the injected code (first 50 lines)\r\n console.log('=== INJECTED SHADER CODE (first 50 lines) ===');\r\n console.log(finalCode.split('\\n').slice(0, 50).join('\\n'));\r\n console.log('=== END INJECTED CODE ===');\r\n \r\n return finalCode;\r\n }\r\n \r\n /**\r\n * Find where to inject extensions and uniforms\r\n * Extensions must come after #version but before any code\r\n * \r\n * Strategy: \r\n * 1. If #version exists, inject right after it\r\n * 2. Otherwise, skip ALL comments (single and multi-line) and inject before first code\r\n */\r\n private findInjectionPoint(code: string): number {\r\n const lines = code.split('\\n');\r\n \r\n // Find #version line (if present) - inject right after\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i].trim();\r\n if (line.startsWith('#version')) {\r\n return this.getLineEndPosition(code, i);\r\n }\r\n }\r\n \r\n // No #version - skip ALL comments (single-line and multi-line blocks)\r\n let inMultiLineComment = false;\r\n let firstCodeLine = 0;\r\n \r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i].trim();\r\n \r\n // Track multi-line comment state\r\n if (line.includes('/*')) {\r\n inMultiLineComment = true;\r\n }\r\n if (line.includes('*/')) {\r\n inMultiLineComment = false;\r\n firstCodeLine = i + 1; // Next line after comment closes\r\n continue;\r\n }\r\n \r\n // Skip if in multi-line comment\r\n if (inMultiLineComment) {\r\n continue;\r\n }\r\n \r\n // Skip empty lines and single-line comments\r\n if (line === '' || line.startsWith('//')) {\r\n firstCodeLine = i + 1;\r\n continue;\r\n }\r\n \r\n // Found first non-comment line - inject before it\r\n break;\r\n }\r\n \r\n // Get position at start of first code line\r\n if (firstCodeLine > 0 && firstCodeLine < lines.length) {\r\n return this.getLineEndPosition(code, firstCodeLine - 1);\r\n }\r\n \r\n return 0;\r\n }\r\n \r\n /**\r\n * Get byte position of end of line N\r\n */\r\n private getLineEndPosition(code: string, lineNumber: number): number {\r\n const lines = code.split('\\n');\r\n let position = 0;\r\n \r\n for (let i = 0; i <= lineNumber && i < lines.length; i++) {\r\n position += lines[i].length + 1; // +1 for newline\r\n }\r\n \r\n return position;\r\n }\r\n \r\n /**\r\n * Get built-in uniform declarations\r\n */\r\n private getBuiltInUniforms(): string {\r\n return `// Core - Canvas & Timing\r\nuniform vec2 u_resolution; // Canvas width and height in pixels\r\nuniform float u_time; // Elapsed time in seconds since scene start\r\nuniform float u_deltaTime; // Time elapsed since last frame in seconds\r\nuniform int u_frame; // Current frame number\r\nuniform float u_pixelRatio; // Device pixel ratio for high-DPI displays\r\nuniform float u_fps; // Current frames per second\r\n\r\n// Mouse API\r\nuniform vec2 u_mouse; // Mouse position in pixels (WebGL coords: bottom-left origin)\r\nuniform bool u_mouseInCanvas; // True if mouse is inside canvas bounds\r\nuniform bool u_mousePressed; // True if any mouse button is pressed\r\nuniform bool u_mouseLeft; // True if left mouse button is pressed\r\nuniform bool u_mouseRight; // True if right mouse button is pressed\r\nuniform bool u_mouseMiddle; // True if middle mouse button is pressed\r\nuniform vec2 u_mouseVelocity; // Mouse movement velocity in pixels per second\r\n\r\n// Keyboard API - Common keys\r\nuniform bool u_keySpace; // True if spacebar is pressed\r\nuniform bool u_keyShift; // True if Shift key is pressed\r\nuniform bool u_keyCtrl; // True if Ctrl/Cmd key is pressed\r\nuniform bool u_keyAlt; // True if Alt/Option key is pressed\r\nuniform bool u_keyW; // True if W key is pressed\r\nuniform bool u_keyA; // True if A key is pressed\r\nuniform bool u_keyS; // True if S key is pressed\r\nuniform bool u_keyD; // True if D key is pressed\r\nuniform bool u_keyUp; // True if Up arrow key is pressed\r\nuniform bool u_keyDown; // True if Down arrow key is pressed\r\nuniform bool u_keyLeft; // True if Left arrow key is pressed\r\nuniform bool u_keyRight; // True if Right arrow key is pressed\r\n\r\n// Touch API\r\nuniform int u_touchCount; // Number of active touch points (0-5)\r\nuniform vec2 u_touch0; // First touch point position in pixels\r\nuniform vec2 u_touch1; // Second touch point position in pixels\r\nuniform vec2 u_touch2; // Third touch point position in pixels\r\nuniform vec2 u_touch3; // Fourth touch point position in pixels\r\nuniform vec2 u_touch4; // Fifth touch point position in pixels\r\n\r\n// Audio - Volume\r\nuniform float u_audioVolume; // RMS volume level (0-1)\r\nuniform float u_audioPeak; // Peak amplitude (0-1)\r\nuniform float u_audioVolumeSmoothed; // Smoothed volume for animation (200ms decay)\r\n\r\n// Audio - Frequency Bands (instant)\r\nuniform float u_audioLow; // Low 20-150 Hz (0-1)\r\nuniform float u_audioLowMid; // Low-mid 150-400 Hz (0-1)\r\nuniform float u_audioMid; // Mid 400-2500 Hz (0-1)\r\nuniform float u_audioHighMid; // High-mid 2500-8000 Hz (0-1)\r\nuniform float u_audioHigh; // High 8000-20000 Hz (0-1)\r\n\r\n// Audio - Frequency Bands (smoothed, 150ms decay)\r\nuniform float u_audioLowSmoothed; // Smoothed low band (0-1)\r\nuniform float u_audioLowMidSmoothed; // Smoothed low-mid band (0-1)\r\nuniform float u_audioMidSmoothed; // Smoothed mid band (0-1)\r\nuniform float u_audioHighMidSmoothed; // Smoothed high-mid band (0-1)\r\nuniform float u_audioHighSmoothed; // Smoothed high band (0-1)\r\n\r\n// Audio - Beat Energy (fast 300ms decay)\r\nuniform float u_audioKick; // Kick energy (0-1)\r\nuniform float u_audioSnare; // Snare energy (0-1)\r\nuniform float u_audioHat; // Hi-hat energy (0-1)\r\nuniform float u_audioAny; // Any beat energy (0-1)\r\n\r\n// Audio - Beat Energy (smoothed 500ms decay)\r\nuniform float u_audioKickSmoothed; // Smoothed kick energy (0-1)\r\nuniform float u_audioSnareSmoothed; // Smoothed snare energy (0-1)\r\nuniform float u_audioHatSmoothed; // Smoothed hi-hat energy (0-1)\r\nuniform float u_audioAnySmoothed; // Smoothed any-beat energy (0-1)\r\n\r\n// Audio - Beat Triggers (true for one frame on beat)\r\nuniform bool u_audioKickTrigger; // True on kick beat frame\r\nuniform bool u_audioSnareTrigger; // True on snare beat frame\r\nuniform bool u_audioHatTrigger; // True on hi-hat beat frame\r\nuniform bool u_audioAnyTrigger; // True on any beat frame\r\n\r\n// Audio - Tempo & Tracking\r\nuniform float u_audioBPM; // Current BPM (60-240)\r\nuniform float u_audioConfidence; // Beat tracking confidence (0-1)\r\nuniform bool u_audioIsLocked; // True when beat tracking is locked\r\n\r\n// Audio - Spectral Features\r\nuniform float u_audioBrightness; // Spectral brightness / centroid (0-1)\r\nuniform float u_audioFlatness; // Spectral flatness / noisiness (0-1)\r\n\r\n// Audio - Textures\r\nuniform sampler2D u_audioFFT; // FFT frequency spectrum (512 bins, 0-255)\r\nuniform sampler2D u_audioWaveform; // Time-domain waveform (fftSize samples, -1 to 1)\r\n\r\n// Video\r\nuniform sampler2D u_video; // Current video frame as texture\r\nuniform vec2 u_videoResolution; // Video frame width and height in pixels\r\nuniform float u_videoFrameRate; // Video frame rate in frames per second\r\n\r\n// Multi-Stream Compositor Support (using individual uniforms due to WebGL 1.0 limitations)\r\nuniform int u_streamCount; // Number of available compositor input streams (0-8)\r\nuniform sampler2D u_stream0; // Stream 0 texture\r\nuniform sampler2D u_stream1; // Stream 1 texture\r\nuniform sampler2D u_stream2; // Stream 2 texture\r\nuniform sampler2D u_stream3; // Stream 3 texture\r\nuniform sampler2D u_stream4; // Stream 4 texture\r\nuniform sampler2D u_stream5; // Stream 5 texture\r\nuniform sampler2D u_stream6; // Stream 6 texture\r\nuniform sampler2D u_stream7; // Stream 7 texture\r\nuniform vec2 u_stream0Resolution; // Stream 0 resolution\r\nuniform vec2 u_stream1Resolution; // Stream 1 resolution\r\nuniform vec2 u_stream2Resolution; // Stream 2 resolution\r\nuniform vec2 u_stream3Resolution; // Stream 3 resolution\r\nuniform vec2 u_stream4Resolution; // Stream 4 resolution\r\nuniform vec2 u_stream5Resolution; // Stream 5 resolution\r\nuniform vec2 u_stream6Resolution; // Stream 6 resolution\r\nuniform vec2 u_stream7Resolution; // Stream 7 resolution\r\nuniform bool u_stream0Connected; // Stream 0 connection status\r\nuniform bool u_stream1Connected; // Stream 1 connection status\r\nuniform bool u_stream2Connected; // Stream 2 connection status\r\nuniform bool u_stream3Connected; // Stream 3 connection status\r\nuniform bool u_stream4Connected; // Stream 4 connection status\r\nuniform bool u_stream5Connected; // Stream 5 connection status\r\nuniform bool u_stream6Connected; // Stream 6 connection status\r\nuniform bool u_stream7Connected; // Stream 7 connection status\r\n\r\n// Device Video Support (device cameras)\r\nuniform int u_deviceCount; // Number of device videos (0-8)\r\nuniform sampler2D u_device0; // Device 0 camera texture\r\nuniform sampler2D u_device1; // Device 1 camera texture\r\nuniform sampler2D u_device2; // Device 2 camera texture\r\nuniform sampler2D u_device3; // Device 3 camera texture\r\nuniform sampler2D u_device4; // Device 4 camera texture\r\nuniform sampler2D u_device5; // Device 5 camera texture\r\nuniform sampler2D u_device6; // Device 6 camera texture\r\nuniform sampler2D u_device7; // Device 7 camera texture\r\nuniform vec2 u_device0Resolution; // Device 0 resolution\r\nuniform vec2 u_device1Resolution; // Device 1 resolution\r\nuniform vec2 u_device2Resolution; // Device 2 resolution\r\nuniform vec2 u_device3Resolution; // Device 3 resolution\r\nuniform vec2 u_device4Resolution; // Device 4 resolution\r\nuniform vec2 u_device5Resolution; // Device 5 resolution\r\nuniform vec2 u_device6Resolution; // Device 6 resolution\r\nuniform vec2 u_device7Resolution; // Device 7 resolution\r\nuniform bool u_device0Connected; // Device 0 connection status\r\nuniform bool u_device1Connected; // Device 1 connection status\r\nuniform bool u_device2Connected; // Device 2 connection status\r\nuniform bool u_device3Connected; // Device 3 connection status\r\nuniform bool u_device4Connected; // Device 4 connection status\r\nuniform bool u_device5Connected; // Device 5 connection status\r\nuniform bool u_device6Connected; // Device 6 connection status\r\nuniform bool u_device7Connected; // Device 7 connection status\r\n\r\n// CV - Face Detection & Expressions\r\nuniform int u_faceCount; // Number of detected faces (0-1)\r\nuniform vec4 u_face0Bounds; // First face bounding box (x, y, width, height) normalized 0-1\r\nuniform vec2 u_face0Center; // First face bounding box center (x, y) normalized 0-1\r\nuniform vec3 u_face0HeadPose; // First face head rotation (pitch, yaw, roll) in degrees\r\nuniform float u_face0Confidence; // First face detection confidence (0-1)\r\nuniform float u_face0Neutral; // First face neutral expression (0-1)\r\nuniform float u_face0Happy; // First face happy expression (0-1)\r\nuniform float u_face0Sad; // First face sad expression (0-1)\r\nuniform float u_face0Angry; // First face angry expression (0-1)\r\nuniform float u_face0Surprised; // First face surprised expression (0-1)\r\nuniform float u_face0Disgusted; // First face disgusted expression (0-1)\r\nuniform float u_face0Fearful; // First face fearful expression (0-1)\r\n\r\n// CV - Face Blendshapes (52 ARKit-compatible coefficients, 0-1 each)\r\n// Brow\r\nuniform float u_face0BrowDownLeft;\r\nuniform float u_face0BrowDownRight;\r\nuniform float u_face0BrowInnerUp;\r\nuniform float u_face0BrowOuterUpLeft;\r\nuniform float u_face0BrowOuterUpRight;\r\n// Cheek\r\nuniform float u_face0CheekPuff;\r\nuniform float u_face0CheekSquintLeft;\r\nuniform float u_face0CheekSquintRight;\r\n// Eye\r\nuniform float u_face0EyeBlinkLeft;\r\nuniform float u_face0EyeBlinkRight;\r\nuniform float u_face0EyeLookDownLeft;\r\nuniform float u_face0EyeLookDownRight;\r\nuniform float u_face0EyeLookInLeft;\r\nuniform float u_face0EyeLookInRight;\r\nuniform float u_face0EyeLookOutLeft;\r\nuniform float u_face0EyeLookOutRight;\r\nuniform float u_face0EyeLookUpLeft;\r\nuniform float u_face0EyeLookUpRight;\r\nuniform float u_face0EyeSquintLeft;\r\nuniform float u_face0EyeSquintRight;\r\nuniform float u_face0EyeWideLeft;\r\nuniform float u_face0EyeWideRight;\r\n// Jaw\r\nuniform float u_face0JawForward;\r\nuniform float u_face0JawLeft;\r\nuniform float u_face0JawOpen;\r\nuniform float u_face0JawRight;\r\n// Mouth\r\nuniform float u_face0MouthClose;\r\nuniform float u_face0MouthDimpleLeft;\r\nuniform float u_face0MouthDimpleRight;\r\nuniform float u_face0MouthFrownLeft;\r\nuniform float u_face0MouthFrownRight;\r\nuniform float u_face0MouthFunnel;\r\nuniform float u_face0MouthLeft;\r\nuniform float u_face0MouthLowerDownLeft;\r\nuniform float u_face0MouthLowerDownRight;\r\nuniform float u_face0MouthPressLeft;\r\nuniform float u_face0MouthPressRight;\r\nuniform float u_face0MouthPucker;\r\nuniform float u_face0MouthRight;\r\nuniform float u_face0MouthRollLower;\r\nuniform float u_face0MouthRollUpper;\r\nuniform float u_face0MouthShrugLower;\r\nuniform float u_face0MouthShrugUpper;\r\nuniform float u_face0MouthSmileLeft;\r\nuniform float u_face0MouthSmileRight;\r\nuniform float u_face0MouthStretchLeft;\r\nuniform float u_face0MouthStretchRight;\r\nuniform float u_face0MouthUpperUpLeft;\r\nuniform float u_face0MouthUpperUpRight;\r\n// Nose & Tongue\r\nuniform float u_face0NoseSneerLeft;\r\nuniform float u_face0NoseSneerRight;\r\nuniform float u_face0TongueOut;\r\n\r\n// CV - Hand Tracking\r\nuniform int u_handCount; // Number of detected hands (0-2)\r\nuniform vec3 u_leftHandPalm; // Left hand palm position (x, y, z)\r\nuniform vec3 u_rightHandPalm; // Right hand palm position (x, y, z)\r\nuniform float u_leftHandFist; // Left hand fist gesture confidence (0-1)\r\nuniform float u_leftHandOpen; // Left hand open palm gesture confidence (0-1)\r\nuniform float u_rightHandFist; // Right hand fist gesture confidence (0-1)\r\nuniform float u_rightHandOpen; // Right hand open palm gesture confidence (0-1)\r\n\r\n// CV - Pose Detection\r\nuniform bool u_poseDetected; // True if a pose is currently detected\r\nuniform vec2 u_nosePosition; // Nose landmark position in pixels\r\nuniform vec2 u_leftWristPosition; // Left wrist landmark position in pixels\r\nuniform vec2 u_rightWristPosition; // Right wrist landmark position in pixels\r\nuniform vec2 u_leftAnklePosition; // Left ankle landmark position in pixels\r\nuniform vec2 u_rightAnklePosition; // Right ankle landmark position in pixels\r\n\r\n// CV - Segmentation\r\nuniform sampler2D u_segmentationMask; // Body segmentation mask texture (0=background, 1=person)\r\nuniform vec2 u_segmentationRes; // Segmentation mask resolution in pixels\r\n\r\n// Device Sensors - Internal Device (viji.device)\r\nuniform vec3 u_deviceAcceleration; // Acceleration without gravity (m/s²) - x, y, z\r\nuniform vec3 u_deviceAccelerationGravity; // Acceleration with gravity (m/s²) - x, y, z\r\nuniform vec3 u_deviceRotationRate; // Rotation rate (deg/s) - alpha, beta, gamma\r\nuniform vec3 u_deviceOrientation; // Device orientation (degrees) - alpha, beta, gamma\r\nuniform bool u_deviceOrientationAbsolute; // True if orientation uses magnetometer (compass)\r\n\r\n// Device Sensors - External Devices (viji.devices[0-7])\r\nuniform int u_externalDeviceCount; // Number of connected external devices (0-8)\r\nuniform vec3 u_device0Acceleration; // Device 0 acceleration without gravity (m/s²)\r\nuniform vec3 u_device0AccelerationGravity; // Device 0 acceleration with gravity (m/s²)\r\nuniform vec3 u_device0RotationRate; // Device 0 rotation rate (deg/s)\r\nuniform vec3 u_device0Orientation; // Device 0 orientation (degrees) - alpha, beta, gamma\r\nuniform vec3 u_device1Acceleration; // Device 1 acceleration without gravity (m/s²)\r\nuniform vec3 u_device1AccelerationGravity; // Device 1 acceleration with gravity (m/s²)\r\nuniform vec3 u_device1RotationRate; // Device 1 rotation rate (deg/s)\r\nuniform vec3 u_device1Orientation; // Device 1 orientation (degrees) - alpha, beta, gamma\r\nuniform vec3 u_device2Acceleration; // Device 2 acceleration without gravity (m/s²)\r\nuniform vec3 u_device2AccelerationGravity; // Device 2 acceleration with gravity (m/s²)\r\nuniform vec3 u_device2RotationRate; // Device 2 rotation rate (deg/s)\r\nuniform vec3 u_device2Orientation; // Device 2 orientation (degrees) - alpha, beta, gamma\r\nuniform vec3 u_device3Acceleration; // Device 3 acceleration without gravity (m/s²)\r\nuniform vec3 u_device3AccelerationGravity; // Device 3 acceleration with gravity (m/s²)\r\nuniform vec3 u_device3RotationRate; // Device 3 rotation rate (deg/s)\r\nuniform vec3 u_device3Orientation; // Device 3 orientation (degrees) - alpha, beta, gamma\r\nuniform vec3 u_device4Acceleration; // Device 4 acceleration without gravity (m/s²)\r\nuniform vec3 u_device4AccelerationGravity; // Device 4 acceleration with gravity (m/s²)\r\nuniform vec3 u_device4RotationRate; // Device 4 rotation rate (deg/s)\r\nuniform vec3 u_device4Orientation; // Device 4 orientation (degrees) - alpha, beta, gamma\r\nuniform vec3 u_device5Acceleration; // Device 5 acceleration without gravity (m/s²)\r\nuniform vec3 u_device5AccelerationGravity; // Device 5 acceleration with gravity (m/s²)\r\nuniform vec3 u_device5RotationRate; // Device 5 rotation rate (deg/s)\r\nuniform vec3 u_device5Orientation; // Device 5 orientation (degrees) - alpha, beta, gamma\r\nuniform vec3 u_device6Acceleration; // Device 6 acceleration without gravity (m/s²)\r\nuniform vec3 u_device6AccelerationGravity; // Device 6 acceleration with gravity (m/s²)\r\nuniform vec3 u_device6RotationRate; // Device 6 rotation rate (deg/s)\r\nuniform vec3 u_device6Orientation; // Device 6 orientation (degrees) - alpha, beta, gamma\r\nuniform vec3 u_device7Acceleration; // Device 7 acceleration without gravity (m/s²)\r\nuniform vec3 u_device7AccelerationGravity; // Device 7 acceleration with gravity (m/s²)\r\nuniform vec3 u_device7RotationRate; // Device 7 rotation rate (deg/s)\r\nuniform vec3 u_device7Orientation; // Device 7 orientation (degrees) - alpha, beta, gamma\r\n\r\n// Backbuffer (previous frame feedback)\r\n${this.backbufferEnabled ? 'uniform sampler2D backbuffer; // Previous frame texture for feedback effects' : '// backbuffer not enabled'}\r\n`;\r\n }\r\n \r\n /**\r\n * Compile and link shader program\r\n */\r\n private compileAndLinkShader(fragmentShaderCode: string): void {\r\n const gl = this.gl;\r\n \r\n // Generate vertex shader matching GLSL version\r\n const vertexShaderCode = this.glslVersion === 'glsl300'\r\n ? `#version 300 es\r\n precision mediump float;\r\n in vec2 a_position;\r\n void main() {\r\n gl_Position = vec4(a_position, 0.0, 1.0);\r\n }`\r\n : `attribute vec2 a_position;\r\n void main() {\r\n gl_Position = vec4(a_position, 0.0, 1.0);\r\n }`;\r\n \r\n // Compile vertex shader\r\n const vertexShader = this.compileShader(gl.VERTEX_SHADER, vertexShaderCode);\r\n \r\n // Compile fragment shader\r\n const fragmentShader = this.compileShader(gl.FRAGMENT_SHADER, fragmentShaderCode);\r\n \r\n // Link program\r\n const program = gl.createProgram();\r\n if (!program) {\r\n throw new Error('Failed to create WebGL program');\r\n }\r\n \r\n gl.attachShader(program, vertexShader);\r\n gl.attachShader(program, fragmentShader);\r\n gl.linkProgram(program);\r\n \r\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\r\n const error = gl.getProgramInfoLog(program);\r\n throw new Error(`Shader program link failed: ${error}`);\r\n }\r\n \r\n this.program = program;\r\n gl.useProgram(program);\r\n \r\n // Clean up shaders (no longer needed after linking)\r\n gl.deleteShader(vertexShader);\r\n gl.deleteShader(fragmentShader);\r\n }\r\n \r\n /**\r\n * Compile a shader\r\n */\r\n private compileShader(type: number, source: string): WebGLShader {\r\n const gl = this.gl;\r\n const shader = gl.createShader(type);\r\n \r\n if (!shader) {\r\n throw new Error('Failed to create shader');\r\n }\r\n \r\n gl.shaderSource(shader, source);\r\n gl.compileShader(shader);\r\n \r\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\r\n const error = gl.getShaderInfoLog(shader);\r\n const shaderType = type === gl.VERTEX_SHADER ? 'vertex' : 'fragment';\r\n throw new Error(`${shaderType} shader compilation failed:\\n${error}`);\r\n }\r\n \r\n return shader;\r\n }\r\n \r\n /**\r\n * Cache uniform locations for fast access\r\n */\r\n private cacheUniformLocations(): void {\r\n if (!this.program) return;\r\n \r\n const gl = this.gl;\r\n const numUniforms = gl.getProgramParameter(this.program, gl.ACTIVE_UNIFORMS);\r\n \r\n const streamUniforms: string[] = [];\r\n \r\n for (let i = 0; i < numUniforms; i++) {\r\n const info = gl.getActiveUniform(this.program, i);\r\n if (info) {\r\n const location = gl.getUniformLocation(this.program, info.name);\r\n this.uniformLocations.set(info.name, location);\r\n \r\n // Track stream-related uniforms for debugging\r\n if (info.name.includes('stream') || info.name.includes('u_stream')) {\r\n streamUniforms.push(info.name);\r\n }\r\n }\r\n }\r\n \r\n // Debug: Log all stream-related uniforms found\r\n if (streamUniforms.length > 0) {\r\n console.log('[ShaderAdapter] Stream-related uniforms found:', streamUniforms);\r\n } else {\r\n console.log('[ShaderAdapter] NO stream-related uniforms found in shader!');\r\n }\r\n }\r\n \r\n /**\r\n * Reserve texture units for special textures\r\n */\r\n private reserveTextureUnits(): void {\r\n // Reserve texture units for built-in textures\r\n this.textureUnits.set('u_audioFFT', this.nextTextureUnit++);\r\n this.textureUnits.set('u_audioWaveform', this.nextTextureUnit++);\r\n this.textureUnits.set('u_video', this.nextTextureUnit++);\r\n this.textureUnits.set('u_segmentationMask', this.nextTextureUnit++);\r\n \r\n // Reserve texture units for multi-stream compositor (individual uniforms, not arrays)\r\n for (let i = 0; i < ShaderWorkerAdapter.MAX_STREAMS; i++) {\r\n this.textureUnits.set(`u_stream${i}`, this.nextTextureUnit++);\r\n }\r\n \r\n if (this.backbufferEnabled) {\r\n this.textureUnits.set('backbuffer', this.nextTextureUnit++);\r\n }\r\n }\r\n \r\n /**\r\n * Create ping-pong framebuffers for backbuffer support\r\n */\r\n private createBackbufferFramebuffers(): void {\r\n const gl = this.gl;\r\n const width = gl.canvas.width;\r\n const height = gl.canvas.height;\r\n \r\n // Create two framebuffer/texture pairs for ping-pong\r\n const createFBOTexture = () => {\r\n const texture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n \r\n const framebuffer = gl.createFramebuffer();\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\r\n \r\n return { framebuffer, texture };\r\n };\r\n \r\n const fbo1 = createFBOTexture();\r\n const fbo2 = createFBOTexture();\r\n \r\n this.backbufferFramebuffer = fbo1.framebuffer;\r\n this.backbufferTexture = fbo1.texture;\r\n this.currentFramebuffer = fbo2.framebuffer;\r\n this.currentTexture = fbo2.texture;\r\n \r\n // Unbind\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n }\r\n \r\n /**\r\n * Main render method\r\n */\r\n public render(viji: any, parameterObjects: Map<string, any>): void {\r\n const gl = this.gl;\r\n \r\n if (!this.program || !this.quadBuffer) {\r\n console.warn('Shader not initialized');\r\n return;\r\n }\r\n \r\n gl.useProgram(this.program);\r\n \r\n // Update all built-in uniforms\r\n this.updateBuiltInUniforms(viji);\r\n \r\n // Update accumulators (before parameter uniforms — accumulators read parameter values)\r\n this.updateAccumulators(viji, parameterObjects);\r\n \r\n // Update parameter uniforms\r\n this.updateParameterUniforms(parameterObjects);\r\n \r\n // If backbuffer enabled, bind backbuffer texture and render to current framebuffer\r\n if (this.backbufferEnabled && this.backbufferTexture) {\r\n // Bind the backbuffer (previous frame) as a texture\r\n const backbufferUnit = this.textureUnits.get('backbuffer');\r\n if (backbufferUnit !== undefined) {\r\n gl.activeTexture(gl.TEXTURE0 + backbufferUnit);\r\n gl.bindTexture(gl.TEXTURE_2D, this.backbufferTexture);\r\n this.setUniform('backbuffer', 'sampler2D', backbufferUnit);\r\n }\r\n \r\n // Render to current framebuffer\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.currentFramebuffer);\r\n }\r\n \r\n // Bind attribute\r\n const positionLocation = gl.getAttribLocation(this.program, 'a_position');\r\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\r\n gl.enableVertexAttribArray(positionLocation);\r\n gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);\r\n \r\n // Draw fullscreen quad\r\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\r\n \r\n // If backbuffer enabled, copy to screen and swap buffers\r\n if (this.backbufferEnabled) {\r\n // Unbind framebuffer (render to screen)\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n \r\n // Draw the current texture to screen\r\n gl.activeTexture(gl.TEXTURE0);\r\n gl.bindTexture(gl.TEXTURE_2D, this.currentTexture);\r\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\r\n \r\n // Swap framebuffers for next frame\r\n const tempFB = this.backbufferFramebuffer;\r\n const tempTex = this.backbufferTexture;\r\n this.backbufferFramebuffer = this.currentFramebuffer;\r\n this.backbufferTexture = this.currentTexture;\r\n this.currentFramebuffer = tempFB;\r\n this.currentTexture = tempTex;\r\n }\r\n }\r\n \r\n /**\r\n * Update built-in uniforms from viji object\r\n */\r\n private updateBuiltInUniforms(viji: any): void {\r\n // Core\r\n this.setUniform('u_resolution', 'vec2', [viji.width, viji.height]);\r\n this.setUniform('u_time', 'float', viji.time);\r\n this.setUniform('u_deltaTime', 'float', viji.deltaTime);\r\n this.setUniform('u_frame', 'int', viji.frameCount);\r\n this.setUniform('u_pixelRatio', 'float', viji.pixelRatio);\r\n this.setUniform('u_fps', 'float', viji.fps);\r\n \r\n // Mouse (flip Y from DOM coords to WebGL coords)\r\n this.setUniform('u_mouse', 'vec2', [viji.mouse.x, viji.height - viji.mouse.y]);\r\n this.setUniform('u_mouseInCanvas', 'bool', viji.mouse.isInCanvas);\r\n this.setUniform('u_mousePressed', 'bool', viji.mouse.isPressed);\r\n this.setUniform('u_mouseLeft', 'bool', viji.mouse.leftButton);\r\n this.setUniform('u_mouseRight', 'bool', viji.mouse.rightButton);\r\n this.setUniform('u_mouseMiddle', 'bool', viji.mouse.middleButton);\r\n this.setUniform('u_mouseVelocity', 'vec2', [viji.mouse.velocity.x, -viji.mouse.velocity.y]);\r\n \r\n // Keyboard - Common keys\r\n this.setUniform('u_keySpace', 'bool', viji.keyboard.isPressed(' ') || viji.keyboard.isPressed('space'));\r\n this.setUniform('u_keyShift', 'bool', viji.keyboard.shift);\r\n this.setUniform('u_keyCtrl', 'bool', viji.keyboard.ctrl);\r\n this.setUniform('u_keyAlt', 'bool', viji.keyboard.alt);\r\n this.setUniform('u_keyW', 'bool', viji.keyboard.isPressed('w') || viji.keyboard.isPressed('W'));\r\n this.setUniform('u_keyA', 'bool', viji.keyboard.isPressed('a') || viji.keyboard.isPressed('A'));\r\n this.setUniform('u_keyS', 'bool', viji.keyboard.isPressed('s') || viji.keyboard.isPressed('S'));\r\n this.setUniform('u_keyD', 'bool', viji.keyboard.isPressed('d') || viji.keyboard.isPressed('D'));\r\n this.setUniform('u_keyUp', 'bool', viji.keyboard.isPressed('ArrowUp'));\r\n this.setUniform('u_keyDown', 'bool', viji.keyboard.isPressed('ArrowDown'));\r\n this.setUniform('u_keyLeft', 'bool', viji.keyboard.isPressed('ArrowLeft'));\r\n this.setUniform('u_keyRight', 'bool', viji.keyboard.isPressed('ArrowRight'));\r\n \r\n // Touch (flip Y from DOM coords to WebGL coords)\r\n this.setUniform('u_touchCount', 'int', viji.touches.count);\r\n for (let i = 0; i < 5; i++) {\r\n const touch = viji.touches.points[i];\r\n if (touch) {\r\n this.setUniform(`u_touch${i}`, 'vec2', [touch.x, viji.height - touch.y]);\r\n } else {\r\n this.setUniform(`u_touch${i}`, 'vec2', [0, 0]);\r\n }\r\n }\r\n \r\n // Audio\r\n const audio = viji.audio;\r\n\r\n // Volume\r\n this.setUniform('u_audioVolume', 'float', audio.volume?.current || 0);\r\n this.setUniform('u_audioPeak', 'float', audio.volume?.peak || 0);\r\n this.setUniform('u_audioVolumeSmoothed', 'float', audio.volume?.smoothed || 0);\r\n\r\n // Bands (instant)\r\n this.setUniform('u_audioLow', 'float', audio.bands?.low || 0);\r\n this.setUniform('u_audioLowMid', 'float', audio.bands?.lowMid || 0);\r\n this.setUniform('u_audioMid', 'float', audio.bands?.mid || 0);\r\n this.setUniform('u_audioHighMid', 'float', audio.bands?.highMid || 0);\r\n this.setUniform('u_audioHigh', 'float', audio.bands?.high || 0);\r\n\r\n // Bands (smoothed)\r\n this.setUniform('u_audioLowSmoothed', 'float', audio.bands?.lowSmoothed || 0);\r\n this.setUniform('u_audioLowMidSmoothed', 'float', audio.bands?.lowMidSmoothed || 0);\r\n this.setUniform('u_audioMidSmoothed', 'float', audio.bands?.midSmoothed || 0);\r\n this.setUniform('u_audioHighMidSmoothed', 'float', audio.bands?.highMidSmoothed || 0);\r\n this.setUniform('u_audioHighSmoothed', 'float', audio.bands?.highSmoothed || 0);\r\n\r\n // Beat energy (fast)\r\n this.setUniform('u_audioKick', 'float', audio.beat?.kick || 0);\r\n this.setUniform('u_audioSnare', 'float', audio.beat?.snare || 0);\r\n this.setUniform('u_audioHat', 'float', audio.beat?.hat || 0);\r\n this.setUniform('u_audioAny', 'float', audio.beat?.any || 0);\r\n\r\n // Beat energy (smoothed)\r\n this.setUniform('u_audioKickSmoothed', 'float', audio.beat?.kickSmoothed || 0);\r\n this.setUniform('u_audioSnareSmoothed', 'float', audio.beat?.snareSmoothed || 0);\r\n this.setUniform('u_audioHatSmoothed', 'float', audio.beat?.hatSmoothed || 0);\r\n this.setUniform('u_audioAnySmoothed', 'float', audio.beat?.anySmoothed || 0);\r\n\r\n // Beat triggers\r\n this.setUniform('u_audioKickTrigger', 'bool', audio.beat?.triggers?.kick || false);\r\n this.setUniform('u_audioSnareTrigger', 'bool', audio.beat?.triggers?.snare || false);\r\n this.setUniform('u_audioHatTrigger', 'bool', audio.beat?.triggers?.hat || false);\r\n this.setUniform('u_audioAnyTrigger', 'bool', audio.beat?.triggers?.any || false);\r\n\r\n // Tempo & tracking\r\n this.setUniform('u_audioBPM', 'float', audio.beat?.bpm || 120);\r\n this.setUniform('u_audioConfidence', 'float', audio.beat?.confidence || 0);\r\n this.setUniform('u_audioIsLocked', 'bool', audio.beat?.isLocked || false);\r\n\r\n // Spectral\r\n this.setUniform('u_audioBrightness', 'float', audio.spectral?.brightness || 0);\r\n this.setUniform('u_audioFlatness', 'float', audio.spectral?.flatness || 0);\r\n\r\n // Audio textures\r\n if (audio.isConnected) {\r\n this.updateAudioFFTTexture(audio.getFrequencyData());\r\n const waveform = audio.getWaveform();\r\n if (waveform.length > 0) {\r\n this.updateAudioWaveformTexture(waveform);\r\n }\r\n }\r\n \r\n // Video\r\n const video = viji.video;\r\n if (video.isConnected && video.currentFrame) {\r\n this.updateVideoTexture(video.currentFrame);\r\n this.setUniform('u_videoResolution', 'vec2', [video.frameWidth, video.frameHeight]);\r\n this.setUniform('u_videoFrameRate', 'float', video.frameRate);\r\n } else {\r\n this.setUniform('u_videoResolution', 'vec2', [0, 0]);\r\n this.setUniform('u_videoFrameRate', 'float', 0);\r\n }\r\n \r\n // Multi-Stream Compositor\r\n const streams = viji.streams || [];\r\n const streamCount = Math.min(streams.length, ShaderWorkerAdapter.MAX_STREAMS);\r\n this.setUniform('u_streamCount', 'int', streamCount);\r\n \r\n \r\n for (let i = 0; i < ShaderWorkerAdapter.MAX_STREAMS; i++) {\r\n // Use individual uniform names instead of array syntax\r\n const connectedUniform = `u_stream${i}Connected`;\r\n const resolutionUniform = `u_stream${i}Resolution`;\r\n \r\n if (i < streamCount && streams[i]?.isConnected && streams[i]?.currentFrame) {\r\n this.updateStreamTexture(i, streams[i].currentFrame);\r\n this.setUniform(resolutionUniform, 'vec2', \r\n [streams[i].frameWidth, streams[i].frameHeight]);\r\n this.setUniform(connectedUniform, 'bool', true);\r\n \r\n } else {\r\n this.setUniform(resolutionUniform, 'vec2', [0, 0]);\r\n this.setUniform(connectedUniform, 'bool', false);\r\n }\r\n }\r\n \r\n // Device videos\r\n const devices = viji.devices || [];\r\n const deviceCount = Math.min(devices.length, ShaderWorkerAdapter.MAX_DEVICE_VIDEOS);\r\n this.setUniform('u_deviceCount', 'int', deviceCount);\r\n \r\n for (let i = 0; i < ShaderWorkerAdapter.MAX_DEVICE_VIDEOS; i++) {\r\n const connectedUniform = `u_device${i}Connected`;\r\n const resolutionUniform = `u_device${i}Resolution`;\r\n \r\n if (i < deviceCount && devices[i]?.video?.isConnected && devices[i].video.currentFrame) {\r\n this.updateDeviceTexture(i, devices[i].video.currentFrame);\r\n this.setUniform(resolutionUniform, 'vec2', \r\n [devices[i].video.frameWidth, devices[i].video.frameHeight]);\r\n this.setUniform(connectedUniform, 'bool', true);\r\n } else {\r\n this.setUniform(resolutionUniform, 'vec2', [0, 0]);\r\n this.setUniform(connectedUniform, 'bool', false);\r\n }\r\n }\r\n \r\n // CV - Faces\r\n const faces = video.faces || [];\r\n this.setUniform('u_faceCount', 'int', faces.length);\r\n if (faces.length > 0) {\r\n const face = faces[0];\r\n const expr = face.expressions || {};\r\n const hp = face.headPose || {};\r\n const bs = face.blendshapes || {};\r\n\r\n this.setUniform('u_face0Bounds', 'vec4', [face.bounds?.x || 0, face.bounds?.y || 0, face.bounds?.width || 0, face.bounds?.height || 0]);\r\n this.setUniform('u_face0Center', 'vec2', [face.center?.x || 0, face.center?.y || 0]);\r\n this.setUniform('u_face0HeadPose', 'vec3', [hp.pitch || 0, hp.yaw || 0, hp.roll || 0]);\r\n this.setUniform('u_face0Confidence', 'float', face.confidence || 0);\r\n\r\n // Expressions\r\n this.setUniform('u_face0Neutral', 'float', expr.neutral || 0);\r\n this.setUniform('u_face0Happy', 'float', expr.happy || 0);\r\n this.setUniform('u_face0Sad', 'float', expr.sad || 0);\r\n this.setUniform('u_face0Angry', 'float', expr.angry || 0);\r\n this.setUniform('u_face0Surprised', 'float', expr.surprised || 0);\r\n this.setUniform('u_face0Disgusted', 'float', expr.disgusted || 0);\r\n this.setUniform('u_face0Fearful', 'float', expr.fearful || 0);\r\n\r\n // Blendshapes (52 ARKit coefficients)\r\n this.setUniform('u_face0BrowDownLeft', 'float', bs.browDownLeft || 0);\r\n this.setUniform('u_face0BrowDownRight', 'float', bs.browDownRight || 0);\r\n this.setUniform('u_face0BrowInnerUp', 'float', bs.browInnerUp || 0);\r\n this.setUniform('u_face0BrowOuterUpLeft', 'float', bs.browOuterUpLeft || 0);\r\n this.setUniform('u_face0BrowOuterUpRight', 'float', bs.browOuterUpRight || 0);\r\n this.setUniform('u_face0CheekPuff', 'float', bs.cheekPuff || 0);\r\n this.setUniform('u_face0CheekSquintLeft', 'float', bs.cheekSquintLeft || 0);\r\n this.setUniform('u_face0CheekSquintRight', 'float', bs.cheekSquintRight || 0);\r\n this.setUniform('u_face0EyeBlinkLeft', 'float', bs.eyeBlinkLeft || 0);\r\n this.setUniform('u_face0EyeBlinkRight', 'float', bs.eyeBlinkRight || 0);\r\n this.setUniform('u_face0EyeLookDownLeft', 'float', bs.eyeLookDownLeft || 0);\r\n this.setUniform('u_face0EyeLookDownRight', 'float', bs.eyeLookDownRight || 0);\r\n this.setUniform('u_face0EyeLookInLeft', 'float', bs.eyeLookInLeft || 0);\r\n this.setUniform('u_face0EyeLookInRight', 'float', bs.eyeLookInRight || 0);\r\n this.setUniform('u_face0EyeLookOutLeft', 'float', bs.eyeLookOutLeft || 0);\r\n this.setUniform('u_face0EyeLookOutRight', 'float', bs.eyeLookOutRight || 0);\r\n this.setUniform('u_face0EyeLookUpLeft', 'float', bs.eyeLookUpLeft || 0);\r\n this.setUniform('u_face0EyeLookUpRight', 'float', bs.eyeLookUpRight || 0);\r\n this.setUniform('u_face0EyeSquintLeft', 'float', bs.eyeSquintLeft || 0);\r\n this.setUniform('u_face0EyeSquintRight', 'float', bs.eyeSquintRight || 0);\r\n this.setUniform('u_face0EyeWideLeft', 'float', bs.eyeWideLeft || 0);\r\n this.setUniform('u_face0EyeWideRight', 'float', bs.eyeWideRight || 0);\r\n this.setUniform('u_face0JawForward', 'float', bs.jawForward || 0);\r\n this.setUniform('u_face0JawLeft', 'float', bs.jawLeft || 0);\r\n this.setUniform('u_face0JawOpen', 'float', bs.jawOpen || 0);\r\n this.setUniform('u_face0JawRight', 'float', bs.jawRight || 0);\r\n this.setUniform('u_face0MouthClose', 'float', bs.mouthClose || 0);\r\n this.setUniform('u_face0MouthDimpleLeft', 'float', bs.mouthDimpleLeft || 0);\r\n this.setUniform('u_face0MouthDimpleRight', 'float', bs.mouthDimpleRight || 0);\r\n this.setUniform('u_face0MouthFrownLeft', 'float', bs.mouthFrownLeft || 0);\r\n this.setUniform('u_face0MouthFrownRight', 'float', bs.mouthFrownRight || 0);\r\n this.setUniform('u_face0MouthFunnel', 'float', bs.mouthFunnel || 0);\r\n this.setUniform('u_face0MouthLeft', 'float', bs.mouthLeft || 0);\r\n this.setUniform('u_face0MouthLowerDownLeft', 'float', bs.mouthLowerDownLeft || 0);\r\n this.setUniform('u_face0MouthLowerDownRight', 'float', bs.mouthLowerDownRight || 0);\r\n this.setUniform('u_face0MouthPressLeft', 'float', bs.mouthPressLeft || 0);\r\n this.setUniform('u_face0MouthPressRight', 'float', bs.mouthPressRight || 0);\r\n this.setUniform('u_face0MouthPucker', 'float', bs.mouthPucker || 0);\r\n this.setUniform('u_face0MouthRight', 'float', bs.mouthRight || 0);\r\n this.setUniform('u_face0MouthRollLower', 'float', bs.mouthRollLower || 0);\r\n this.setUniform('u_face0MouthRollUpper', 'float', bs.mouthRollUpper || 0);\r\n this.setUniform('u_face0MouthShrugLower', 'float', bs.mouthShrugLower || 0);\r\n this.setUniform('u_face0MouthShrugUpper', 'float', bs.mouthShrugUpper || 0);\r\n this.setUniform('u_face0MouthSmileLeft', 'float', bs.mouthSmileLeft || 0);\r\n this.setUniform('u_face0MouthSmileRight', 'float', bs.mouthSmileRight || 0);\r\n this.setUniform('u_face0MouthStretchLeft', 'float', bs.mouthStretchLeft || 0);\r\n this.setUniform('u_face0MouthStretchRight', 'float', bs.mouthStretchRight || 0);\r\n this.setUniform('u_face0MouthUpperUpLeft', 'float', bs.mouthUpperUpLeft || 0);\r\n this.setUniform('u_face0MouthUpperUpRight', 'float', bs.mouthUpperUpRight || 0);\r\n this.setUniform('u_face0NoseSneerLeft', 'float', bs.noseSneerLeft || 0);\r\n this.setUniform('u_face0NoseSneerRight', 'float', bs.noseSneerRight || 0);\r\n this.setUniform('u_face0TongueOut', 'float', bs.tongueOut || 0);\r\n } else {\r\n this.setUniform('u_face0Bounds', 'vec4', [0, 0, 0, 0]);\r\n this.setUniform('u_face0Center', 'vec2', [0, 0]);\r\n this.setUniform('u_face0HeadPose', 'vec3', [0, 0, 0]);\r\n this.setUniform('u_face0Confidence', 'float', 0);\r\n this.setUniform('u_face0Neutral', 'float', 0);\r\n this.setUniform('u_face0Happy', 'float', 0);\r\n this.setUniform('u_face0Sad', 'float', 0);\r\n this.setUniform('u_face0Angry', 'float', 0);\r\n this.setUniform('u_face0Surprised', 'float', 0);\r\n this.setUniform('u_face0Disgusted', 'float', 0);\r\n this.setUniform('u_face0Fearful', 'float', 0);\r\n // Blendshapes default to 0 via shader initialization when unused\r\n }\r\n \r\n // CV - Hands\r\n const hands = video.hands || [];\r\n this.setUniform('u_handCount', 'int', hands.length);\r\n \r\n const leftHand = hands.find((h: any) => h.handedness === 'left');\r\n const rightHand = hands.find((h: any) => h.handedness === 'right');\r\n \r\n if (leftHand) {\r\n this.setUniform('u_leftHandPalm', 'vec3', [leftHand.palm.x, leftHand.palm.y, leftHand.palm.z]);\r\n this.setUniform('u_leftHandFist', 'float', leftHand.gestures?.fist || 0);\r\n this.setUniform('u_leftHandOpen', 'float', leftHand.gestures?.openPalm || 0);\r\n } else {\r\n this.setUniform('u_leftHandPalm', 'vec3', [0, 0, 0]);\r\n this.setUniform('u_leftHandFist', 'float', 0);\r\n this.setUniform('u_leftHandOpen', 'float', 0);\r\n }\r\n \r\n if (rightHand) {\r\n this.setUniform('u_rightHandPalm', 'vec3', [rightHand.palm.x, rightHand.palm.y, rightHand.palm.z]);\r\n this.setUniform('u_rightHandFist', 'float', rightHand.gestures?.fist || 0);\r\n this.setUniform('u_rightHandOpen', 'float', rightHand.gestures?.openPalm || 0);\r\n } else {\r\n this.setUniform('u_rightHandPalm', 'vec3', [0, 0, 0]);\r\n this.setUniform('u_rightHandFist', 'float', 0);\r\n this.setUniform('u_rightHandOpen', 'float', 0);\r\n }\r\n \r\n // CV - Pose\r\n const pose = video.pose;\r\n this.setUniform('u_poseDetected', 'bool', pose !== null);\r\n if (pose) {\r\n // Simplified - just provide key landmarks\r\n // Nose (landmark 0), wrists (landmarks 15, 16), ankles (landmarks 27, 28)\r\n const nose = pose.landmarks[0];\r\n const leftWrist = pose.landmarks[15];\r\n const rightWrist = pose.landmarks[16];\r\n const leftAnkle = pose.landmarks[27];\r\n const rightAnkle = pose.landmarks[28];\r\n \r\n this.setUniform('u_nosePosition', 'vec2', [nose?.x || 0, nose?.y || 0]);\r\n this.setUniform('u_leftWristPosition', 'vec2', [leftWrist?.x || 0, leftWrist?.y || 0]);\r\n this.setUniform('u_rightWristPosition', 'vec2', [rightWrist?.x || 0, rightWrist?.y || 0]);\r\n this.setUniform('u_leftAnklePosition', 'vec2', [leftAnkle?.x || 0, leftAnkle?.y || 0]);\r\n this.setUniform('u_rightAnklePosition', 'vec2', [rightAnkle?.x || 0, rightAnkle?.y || 0]);\r\n } else {\r\n this.setUniform('u_nosePosition', 'vec2', [0, 0]);\r\n this.setUniform('u_leftWristPosition', 'vec2', [0, 0]);\r\n this.setUniform('u_rightWristPosition', 'vec2', [0, 0]);\r\n this.setUniform('u_leftAnklePosition', 'vec2', [0, 0]);\r\n this.setUniform('u_rightAnklePosition', 'vec2', [0, 0]);\r\n }\r\n \r\n // CV - Segmentation\r\n const segmentation = video.segmentation;\r\n if (segmentation) {\r\n this.updateSegmentationTexture(segmentation.mask, segmentation.width, segmentation.height);\r\n this.setUniform('u_segmentationRes', 'vec2', [segmentation.width, segmentation.height]);\r\n } else {\r\n this.setUniform('u_segmentationRes', 'vec2', [0, 0]);\r\n }\r\n \r\n // Device Sensors - Internal Device (viji.device)\r\n const internalDevice = viji.device;\r\n if (internalDevice) {\r\n // Motion data\r\n const motion = internalDevice.motion;\r\n if (motion?.acceleration) {\r\n this.setUniform('u_deviceAcceleration', 'vec3', [\r\n motion.acceleration.x ?? 0,\r\n motion.acceleration.y ?? 0,\r\n motion.acceleration.z ?? 0\r\n ]);\r\n } else {\r\n this.setUniform('u_deviceAcceleration', 'vec3', [0, 0, 0]);\r\n }\r\n \r\n if (motion?.accelerationIncludingGravity) {\r\n this.setUniform('u_deviceAccelerationGravity', 'vec3', [\r\n motion.accelerationIncludingGravity.x ?? 0,\r\n motion.accelerationIncludingGravity.y ?? 0,\r\n motion.accelerationIncludingGravity.z ?? 0\r\n ]);\r\n } else {\r\n this.setUniform('u_deviceAccelerationGravity', 'vec3', [0, 0, 0]);\r\n }\r\n \r\n if (motion?.rotationRate) {\r\n this.setUniform('u_deviceRotationRate', 'vec3', [\r\n motion.rotationRate.alpha ?? 0,\r\n motion.rotationRate.beta ?? 0,\r\n motion.rotationRate.gamma ?? 0\r\n ]);\r\n } else {\r\n this.setUniform('u_deviceRotationRate', 'vec3', [0, 0, 0]);\r\n }\r\n \r\n // Orientation data\r\n const orientation = internalDevice.orientation;\r\n if (orientation) {\r\n this.setUniform('u_deviceOrientation', 'vec3', [\r\n orientation.alpha ?? 0,\r\n orientation.beta ?? 0,\r\n orientation.gamma ?? 0\r\n ]);\r\n this.setUniform('u_deviceOrientationAbsolute', 'bool', orientation.absolute);\r\n } else {\r\n this.setUniform('u_deviceOrientation', 'vec3', [0, 0, 0]);\r\n this.setUniform('u_deviceOrientationAbsolute', 'bool', false);\r\n }\r\n } else {\r\n // No internal device data\r\n this.setUniform('u_deviceAcceleration', 'vec3', [0, 0, 0]);\r\n this.setUniform('u_deviceAccelerationGravity', 'vec3', [0, 0, 0]);\r\n this.setUniform('u_deviceRotationRate', 'vec3', [0, 0, 0]);\r\n this.setUniform('u_deviceOrientation', 'vec3', [0, 0, 0]);\r\n this.setUniform('u_deviceOrientationAbsolute', 'bool', false);\r\n }\r\n \r\n // Device Sensors - External Devices (viji.devices[])\r\n const externalDevices = viji.devices || [];\r\n const externalDeviceCount = Math.min(externalDevices.length, ShaderWorkerAdapter.MAX_EXTERNAL_DEVICES);\r\n this.setUniform('u_externalDeviceCount', 'int', externalDeviceCount);\r\n \r\n for (let i = 0; i < ShaderWorkerAdapter.MAX_EXTERNAL_DEVICES; i++) {\r\n if (i < externalDeviceCount) {\r\n const device = externalDevices[i];\r\n \r\n // Motion data\r\n const motion = device.motion;\r\n if (motion?.acceleration) {\r\n this.setUniform(`u_device${i}Acceleration`, 'vec3', [\r\n motion.acceleration.x ?? 0,\r\n motion.acceleration.y ?? 0,\r\n motion.acceleration.z ?? 0\r\n ]);\r\n } else {\r\n this.setUniform(`u_device${i}Acceleration`, 'vec3', [0, 0, 0]);\r\n }\r\n \r\n if (motion?.accelerationIncludingGravity) {\r\n this.setUniform(`u_device${i}AccelerationGravity`, 'vec3', [\r\n motion.accelerationIncludingGravity.x ?? 0,\r\n motion.accelerationIncludingGravity.y ?? 0,\r\n motion.accelerationIncludingGravity.z ?? 0\r\n ]);\r\n } else {\r\n this.setUniform(`u_device${i}AccelerationGravity`, 'vec3', [0, 0, 0]);\r\n }\r\n \r\n if (motion?.rotationRate) {\r\n this.setUniform(`u_device${i}RotationRate`, 'vec3', [\r\n motion.rotationRate.alpha ?? 0,\r\n motion.rotationRate.beta ?? 0,\r\n motion.rotationRate.gamma ?? 0\r\n ]);\r\n } else {\r\n this.setUniform(`u_device${i}RotationRate`, 'vec3', [0, 0, 0]);\r\n }\r\n \r\n // Orientation data\r\n const orientation = device.orientation;\r\n if (orientation) {\r\n this.setUniform(`u_device${i}Orientation`, 'vec3', [\r\n orientation.alpha ?? 0,\r\n orientation.beta ?? 0,\r\n orientation.gamma ?? 0\r\n ]);\r\n } else {\r\n this.setUniform(`u_device${i}Orientation`, 'vec3', [0, 0, 0]);\r\n }\r\n } else {\r\n // No device at this index - set to zero\r\n this.setUniform(`u_device${i}Acceleration`, 'vec3', [0, 0, 0]);\r\n this.setUniform(`u_device${i}AccelerationGravity`, 'vec3', [0, 0, 0]);\r\n this.setUniform(`u_device${i}RotationRate`, 'vec3', [0, 0, 0]);\r\n this.setUniform(`u_device${i}Orientation`, 'vec3', [0, 0, 0]);\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Update accumulator uniforms — CPU-side phase accumulation for smooth animation.\r\n * Each accumulator adds (rate × deltaTime) per frame, where rate comes from\r\n * a referenced parameter value or a numeric constant.\r\n */\r\n private updateAccumulators(viji: any, parameterObjects: Map<string, any>): void {\r\n const dt = viji.deltaTime || 0;\r\n \r\n for (const param of this.parameters) {\r\n if (param.type !== 'accumulator') continue;\r\n \r\n const rateConfig = param.config.rate;\r\n let rate: number;\r\n \r\n if (typeof rateConfig === 'number') {\r\n rate = rateConfig;\r\n } else {\r\n const sourceParam = parameterObjects.get(rateConfig);\r\n if (sourceParam !== undefined) {\r\n rate = sourceParam.value ?? 0;\r\n } else {\r\n if (!this.accumulatorWarned.has(param.uniformName)) {\r\n console.warn(`Accumulator '${param.uniformName}': rate source '${rateConfig}' not found, using 0`);\r\n this.accumulatorWarned.add(param.uniformName);\r\n }\r\n rate = 0;\r\n }\r\n }\r\n \r\n const current = this.accumulatorValues.get(param.uniformName) ?? 0;\r\n const next = current + rate * dt;\r\n this.accumulatorValues.set(param.uniformName, next);\r\n this.setUniform(param.uniformName, 'float', next);\r\n }\r\n }\r\n \r\n /**\r\n * Update parameter uniforms from parameter objects\r\n */\r\n private updateParameterUniforms(parameterObjects: Map<string, any>): void {\r\n for (const param of this.parameters) {\r\n if (param.type === 'accumulator') continue;\r\n \r\n const paramObj = parameterObjects.get(param.uniformName);\r\n if (!paramObj) {\r\n // Debug: Parameter not found\r\n if (Math.random() < 0.01) {\r\n console.log(`[ShaderAdapter] Parameter '${param.uniformName}' not found in parameterObjects`);\r\n }\r\n continue;\r\n }\r\n \r\n const value = paramObj.value;\r\n \r\n \r\n switch (param.type) {\r\n case 'slider':\r\n case 'number':\r\n this.setUniform(param.uniformName, 'float', value);\r\n break;\r\n \r\n case 'color':\r\n // Convert hex color to RGB vec3\r\n const rgb = this.hexToRgb(value);\r\n this.setUniform(param.uniformName, 'vec3', rgb);\r\n break;\r\n \r\n case 'toggle':\r\n this.setUniform(param.uniformName, 'bool', value);\r\n break;\r\n \r\n case 'select':\r\n // Select uses index\r\n const index = param.config.options?.indexOf(value) || 0;\r\n this.setUniform(param.uniformName, 'int', index);\r\n break;\r\n \r\n case 'image':\r\n // Image parameters are handled separately as textures\r\n if (value) {\r\n this.updateImageTexture(param.uniformName, value);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Set uniform value\r\n */\r\n private setUniform(name: string, type: string, value: any): void {\r\n const location = this.uniformLocations.get(name);\r\n if (location === null || location === undefined) {\r\n // Debug: Log missing array uniforms\r\n if (name.includes('[') && Math.random() < 0.01) {\r\n console.log(`[ShaderAdapter] Uniform '${name}' not found (location is ${location})`);\r\n }\r\n return; // Uniform not used in shader (optimized away)\r\n }\r\n \r\n const gl = this.gl;\r\n \r\n switch (type) {\r\n case 'float':\r\n gl.uniform1f(location, value);\r\n break;\r\n case 'int':\r\n gl.uniform1i(location, value);\r\n break;\r\n case 'bool':\r\n gl.uniform1i(location, value ? 1 : 0);\r\n break;\r\n case 'vec2':\r\n gl.uniform2f(location, value[0], value[1]);\r\n break;\r\n case 'vec3':\r\n gl.uniform3f(location, value[0], value[1], value[2]);\r\n break;\r\n case 'vec4':\r\n gl.uniform4f(location, value[0], value[1], value[2], value[3]);\r\n break;\r\n }\r\n }\r\n \r\n /**\r\n * Convert hex color to RGB [0-1]\r\n */\r\n private hexToRgb(hex: string): [number, number, number] {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n if (result) {\r\n return [\r\n parseInt(result[1], 16) / 255,\r\n parseInt(result[2], 16) / 255,\r\n parseInt(result[3], 16) / 255\r\n ];\r\n }\r\n return [0, 0, 0];\r\n }\r\n \r\n /**\r\n * Update audio FFT texture\r\n */\r\n private updateAudioFFTTexture(frequencyData: Uint8Array): void {\r\n const gl = this.gl;\r\n const unit = this.textureUnits.get('u_audioFFT')!;\r\n \r\n if (!this.audioFFTTexture) {\r\n this.audioFFTTexture = gl.createTexture();\r\n }\r\n \r\n gl.activeTexture(gl.TEXTURE0 + unit);\r\n gl.bindTexture(gl.TEXTURE_2D, this.audioFFTTexture);\r\n \r\n gl.texImage2D(\r\n gl.TEXTURE_2D, 0, gl.LUMINANCE,\r\n frequencyData.length, 1, 0,\r\n gl.LUMINANCE, gl.UNSIGNED_BYTE,\r\n frequencyData\r\n );\r\n \r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n \r\n const location = this.uniformLocations.get('u_audioFFT');\r\n if (location) {\r\n gl.uniform1i(location, unit);\r\n }\r\n }\r\n \r\n /**\r\n * Update audio waveform texture from Float32Array (-1..1 range)\r\n */\r\n private updateAudioWaveformTexture(waveformData: Float32Array): void {\r\n const gl = this.gl;\r\n const unit = this.textureUnits.get('u_audioWaveform')!;\r\n\r\n if (!this.audioWaveformTexture) {\r\n this.audioWaveformTexture = gl.createTexture();\r\n }\r\n\r\n // Convert float -1..1 to unsigned byte 0..255\r\n const bytes = new Uint8Array(waveformData.length);\r\n for (let i = 0; i < waveformData.length; i++) {\r\n bytes[i] = Math.round((waveformData[i] * 0.5 + 0.5) * 255);\r\n }\r\n\r\n gl.activeTexture(gl.TEXTURE0 + unit);\r\n gl.bindTexture(gl.TEXTURE_2D, this.audioWaveformTexture);\r\n\r\n gl.texImage2D(\r\n gl.TEXTURE_2D, 0, gl.LUMINANCE,\r\n bytes.length, 1, 0,\r\n gl.LUMINANCE, gl.UNSIGNED_BYTE,\r\n bytes\r\n );\r\n\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n const location = this.uniformLocations.get('u_audioWaveform');\r\n if (location) {\r\n gl.uniform1i(location, unit);\r\n }\r\n }\r\n\r\n /**\r\n * Update video texture\r\n * Supports both OffscreenCanvas and ImageBitmap\r\n */\r\n private updateVideoTexture(videoFrame: OffscreenCanvas | ImageBitmap): void {\r\n const gl = this.gl;\r\n const unit = this.textureUnits.get('u_video')!;\r\n\r\n if (!this.videoTexture) {\r\n this.videoTexture = gl.createTexture();\r\n }\r\n\r\n gl.activeTexture(gl.TEXTURE0 + unit);\r\n gl.bindTexture(gl.TEXTURE_2D, this.videoTexture);\r\n\r\n // Only flip OffscreenCanvas (webcam/video with Y-down coordinates)\r\n // ImageBitmap sources would be pre-flipped (already Y-up)\r\n const shouldFlip = videoFrame instanceof OffscreenCanvas;\r\n \r\n if (shouldFlip) {\r\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\r\n }\r\n\r\n gl.texImage2D(\r\n gl.TEXTURE_2D, 0, gl.RGBA,\r\n gl.RGBA, gl.UNSIGNED_BYTE,\r\n videoFrame\r\n );\r\n\r\n // Reset to default\r\n if (shouldFlip) {\r\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\r\n }\r\n\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n const location = this.uniformLocations.get('u_video');\r\n if (location) {\r\n gl.uniform1i(location, unit);\r\n }\r\n \r\n // Close ImageBitmap after GPU upload if applicable\r\n if (videoFrame instanceof ImageBitmap) {\r\n videoFrame.close();\r\n }\r\n }\r\n \r\n /**\r\n * Update compositor stream texture at specified index\r\n * Supports both OffscreenCanvas and ImageBitmap for zero-copy pipeline\r\n */\r\n private updateStreamTexture(index: number, streamFrame: OffscreenCanvas | ImageBitmap): void {\r\n const gl = this.gl;\r\n const uniformName = `u_stream${index}`; // Individual uniform, not array\r\n const unit = this.textureUnits.get(uniformName)!;\r\n\r\n // Create texture if needed\r\n if (!this.streamTextures[index]) {\r\n this.streamTextures[index] = gl.createTexture();\r\n }\r\n\r\n gl.activeTexture(gl.TEXTURE0 + unit);\r\n gl.bindTexture(gl.TEXTURE_2D, this.streamTextures[index]!);\r\n\r\n // Only flip OffscreenCanvas (webcam/video sources with Y-down coordinates)\r\n // ImageBitmap from compositor sources are pre-flipped at capture (already Y-up for WebGL)\r\n const shouldFlip = streamFrame instanceof OffscreenCanvas;\r\n if (shouldFlip) {\r\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\r\n }\r\n\r\n // Upload texture (works with both Canvas and ImageBitmap - GPU-to-GPU!)\r\n gl.texImage2D(\r\n gl.TEXTURE_2D, 0, gl.RGBA,\r\n gl.RGBA, gl.UNSIGNED_BYTE,\r\n streamFrame\r\n );\r\n\r\n // Reset to default\r\n if (shouldFlip) {\r\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\r\n }\r\n\r\n // Same texture parameters as video\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n // Bind texture unit to uniform\r\n const location = this.uniformLocations.get(uniformName);\r\n if (location) {\r\n gl.uniform1i(location, unit);\r\n }\r\n \r\n // 🚀 ZERO-COPY: Close ImageBitmap after GPU upload to free GPU memory immediately\r\n // Canvas doesn't need closing (managed differently)\r\n if (streamFrame instanceof ImageBitmap) {\r\n streamFrame.close();\r\n }\r\n }\r\n \r\n /**\r\n * Update device video texture\r\n */\r\n private updateDeviceTexture(index: number, frame: OffscreenCanvas | ImageBitmap): void {\r\n if (!this.gl || index >= ShaderWorkerAdapter.MAX_DEVICE_VIDEOS) return;\r\n \r\n // Create texture if needed\r\n if (!this.deviceTextures[index]) {\r\n this.deviceTextures[index] = this.gl.createTexture();\r\n }\r\n \r\n const texture = this.deviceTextures[index];\r\n if (!texture) return;\r\n \r\n // Bind to texture unit (use units 8-15 for devices to avoid conflicts)\r\n const textureUnit = 8 + index;\r\n this.gl.activeTexture(this.gl.TEXTURE0 + textureUnit);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\r\n \r\n // Flip if OffscreenCanvas (same logic as streams)\r\n const shouldFlip = frame instanceof OffscreenCanvas;\r\n if (shouldFlip) {\r\n this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL, true);\r\n }\r\n \r\n // Upload texture\r\n this.gl.texImage2D(\r\n this.gl.TEXTURE_2D, 0, this.gl.RGBA,\r\n this.gl.RGBA, this.gl.UNSIGNED_BYTE, frame\r\n );\r\n \r\n // Reset flip\r\n if (shouldFlip) {\r\n this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL, false);\r\n }\r\n \r\n // Set texture parameters\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, this.gl.LINEAR);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);\r\n \r\n // Close ImageBitmap after upload (zero-copy)\r\n if (frame instanceof ImageBitmap) {\r\n frame.close();\r\n }\r\n }\r\n \r\n /**\r\n * Update segmentation mask texture\r\n */\r\n private updateSegmentationTexture(mask: Uint8Array, width: number, height: number): void {\r\n const gl = this.gl;\r\n const unit = this.textureUnits.get('u_segmentationMask')!;\r\n \r\n if (!this.segmentationTexture) {\r\n this.segmentationTexture = gl.createTexture();\r\n }\r\n \r\n gl.activeTexture(gl.TEXTURE0 + unit);\r\n gl.bindTexture(gl.TEXTURE_2D, this.segmentationTexture);\r\n \r\n gl.texImage2D(\r\n gl.TEXTURE_2D, 0, gl.LUMINANCE,\r\n width, height, 0,\r\n gl.LUMINANCE, gl.UNSIGNED_BYTE,\r\n mask\r\n );\r\n \r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n \r\n const location = this.uniformLocations.get('u_segmentationMask');\r\n if (location) {\r\n gl.uniform1i(location, unit);\r\n }\r\n }\r\n \r\n /**\r\n * Update image parameter texture\r\n */\r\n private updateImageTexture(name: string, imageBitmap: ImageBitmap | OffscreenCanvas): void {\r\n const gl = this.gl;\r\n \r\n // Assign texture unit if not already assigned\r\n if (!this.textureUnits.has(name)) {\r\n this.textureUnits.set(name, this.nextTextureUnit++);\r\n }\r\n \r\n const unit = this.textureUnits.get(name)!;\r\n \r\n // Create texture if needed\r\n if (!this.textures.has(name)) {\r\n const texture = gl.createTexture();\r\n if (texture) {\r\n this.textures.set(name, texture);\r\n }\r\n }\r\n \r\n const texture = this.textures.get(name);\r\n if (!texture) return;\r\n \r\n gl.activeTexture(gl.TEXTURE0 + unit);\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n \r\n gl.texImage2D(\r\n gl.TEXTURE_2D, 0, gl.RGBA,\r\n gl.RGBA, gl.UNSIGNED_BYTE,\r\n imageBitmap\r\n );\r\n \r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n \r\n const location = this.uniformLocations.get(name);\r\n if (location) {\r\n gl.uniform1i(location, unit);\r\n }\r\n }\r\n \r\n /**\r\n * Handle canvas resize\r\n */\r\n public resize(width: number, height: number): void {\r\n const gl = this.gl;\r\n gl.viewport(0, 0, width, height);\r\n \r\n // Recreate backbuffer framebuffers if enabled to match new canvas size\r\n if (this.backbufferEnabled) {\r\n this.createBackbufferFramebuffers();\r\n }\r\n }\r\n \r\n /**\r\n * Get parameter definitions for host\r\n */\r\n public getParameterDefinitions(): ShaderParameterDefinition[] {\r\n return this.parameters;\r\n }\r\n \r\n /**\r\n * Cleanup resources\r\n */\r\n public destroy(): void {\r\n const gl = this.gl;\r\n \r\n // Delete program\r\n if (this.program) {\r\n gl.deleteProgram(this.program);\r\n this.program = null;\r\n }\r\n \r\n // Delete textures\r\n if (this.audioFFTTexture) gl.deleteTexture(this.audioFFTTexture);\r\n if (this.audioWaveformTexture) gl.deleteTexture(this.audioWaveformTexture);\r\n if (this.videoTexture) gl.deleteTexture(this.videoTexture);\r\n if (this.segmentationTexture) gl.deleteTexture(this.segmentationTexture);\r\n \r\n // Delete stream textures\r\n for (const texture of this.streamTextures) {\r\n if (texture) gl.deleteTexture(texture);\r\n }\r\n this.streamTextures = [];\r\n \r\n // Delete device video textures\r\n for (const texture of this.deviceTextures) {\r\n if (texture) gl.deleteTexture(texture);\r\n }\r\n this.deviceTextures = [];\r\n \r\n // Delete parameter image textures\r\n for (const texture of this.textures.values()) {\r\n if (texture) gl.deleteTexture(texture);\r\n }\r\n this.textures.clear();\r\n \r\n // Delete backbuffer resources\r\n if (this.backbufferFramebuffer) gl.deleteFramebuffer(this.backbufferFramebuffer);\r\n if (this.backbufferTexture) gl.deleteTexture(this.backbufferTexture);\r\n if (this.currentFramebuffer) gl.deleteFramebuffer(this.currentFramebuffer);\r\n if (this.currentTexture) gl.deleteTexture(this.currentTexture);\r\n \r\n // Delete buffers\r\n if (this.quadBuffer) gl.deleteBuffer(this.quadBuffer);\r\n }\r\n}\r\n\r\n","import { \r\n WorkerMessage, \r\n WorkerInitMessage, \r\n WorkerFrameRateMessage, \r\n WorkerRefreshRateMessage, \r\n WorkerCVFrameRateMessage,\r\n WorkerResolutionMessage, \r\n WorkerParameterMessage, \r\n WorkerParameterBatchMessage, \r\n WorkerStreamMessage, \r\n WorkerAudioAnalysisMessage,\r\n WorkerVideoCanvasSetupMessage,\r\n WorkerVideoFrameUpdateMessage,\r\n WorkerVideoConfigUpdateMessage,\r\n WorkerPerformanceMessage, \r\n WorkerSetSceneCodeMessage,\r\n WorkerDeviceStateMessage\r\n} from './types.js';\r\nimport { \r\n SliderConfig, \r\n ColorConfig, \r\n ToggleConfig, \r\n SelectConfig, \r\n TextConfig, \r\n NumberConfig,\r\n DeviceSensorState,\r\n DeviceState\r\n} from '../types/index.js';\r\nimport { ParameterSystem } from './ParameterSystem.js';\r\nimport { InteractionSystem } from './InteractionSystem.js';\r\nimport { VideoSystem } from './VideoSystem.js';\r\nimport { P5WorkerAdapter } from './renderers/P5WorkerAdapter.js';\r\nimport { ShaderWorkerAdapter } from './renderers/ShaderWorkerAdapter.js';\r\n\r\n// Viji Worker Runtime Implementation\r\nexport class VijiWorkerRuntime {\r\n private canvas: OffscreenCanvas | null = null;\r\n private ctx: OffscreenCanvasRenderingContext2D | null = null;\r\n private gl: WebGLRenderingContext | WebGL2RenderingContext | null = null;\r\n private isRunning = false;\r\n private frameCount = 0;\r\n private lastTime = 0;\r\n private startTime = 0;\r\n private frameRateMode: 'full' | 'half' = 'full';\r\n private skipNextFrame = false;\r\n private screenRefreshRate = 60; // Will be detected\r\n \r\n // Debug logging control\r\n private debugMode = false;\r\n \r\n // P5.js adapter for P5 mode\r\n private p5Adapter: any = null;\r\n \r\n // Shader adapter for shader mode\r\n private shaderAdapter: any = null;\r\n \r\n private rendererType: 'native' | 'p5' | 'shader' = 'native';\r\n\r\n // Pending capture requests (queue to handle multiple simultaneous requests)\r\n private pendingCaptures: Array<{\r\n type: 'capture-frame';\r\n id: string;\r\n data: { \r\n format?: 'blob' | 'bitmap';\r\n type?: string; \r\n resolution?: number | { width: number; height: number };\r\n };\r\n }> = [];\r\n\r\n /**\r\n * Enable or disable debug logging\r\n */\r\n setDebugMode(enabled: boolean): void {\r\n this.debugMode = enabled;\r\n // Propagate to child systems\r\n this.videoSystems.forEach(vs => vs?.setDebugMode(enabled));\r\n if (this.parameterSystem && 'setDebugMode' in this.parameterSystem) {\r\n (this.parameterSystem as any).setDebugMode(enabled);\r\n }\r\n if (this.interactionSystem && 'setDebugMode' in this.interactionSystem) {\r\n (this.interactionSystem as any).setDebugMode(enabled);\r\n }\r\n }\r\n\r\n /**\r\n * Debug logging helper\r\n */\r\n private debugLog(message: string, ...args: any[]): void {\r\n if (this.debugMode) {\r\n console.log(message, ...args);\r\n }\r\n }\r\n \r\n // Effective refresh rate tracking\r\n private effectiveFrameTimes: number[] = [];\r\n private lastEffectiveRateReport = 0;\r\n private effectiveRateReportInterval = 1000; // Report every 1 second\r\n\r\n // Parameter system\r\n private parameterSystem: ParameterSystem;\r\n \r\n // Interaction system (Phase 7)\r\n private interactionSystem: InteractionSystem;\r\n \r\n // Video systems (multi-stream) - sparse array with reserved index contract:\r\n // Index 0: Reserved for main video (with CV) - may be undefined if no main video\r\n // Index 1..N: Additional streams (no CV)\r\n // Index N+1..: Device streams\r\n // IMPORTANT: Index 0 is ALWAYS reserved even when main video is absent\r\n private videoSystems: VideoSystem[] = [];\r\n // Auto-capture for frame sources\r\n private autoCaptureEnabled: boolean = false;\r\n private autoCaptureFormat: { flipY: boolean } = { flipY: true }; // Default: flip for WebGL compatibility\r\n \r\n // Audio state (Phase 5) - receives analysis results from host\r\n private audioState = {\r\n isConnected: false,\r\n volume: { current: 0, peak: 0, smoothed: 0 },\r\n bands: {\r\n low: 0, lowMid: 0, mid: 0, highMid: 0, high: 0,\r\n lowSmoothed: 0, lowMidSmoothed: 0, midSmoothed: 0, highMidSmoothed: 0, highSmoothed: 0\r\n },\r\n beat: {\r\n kick: 0,\r\n snare: 0,\r\n hat: 0,\r\n any: 0,\r\n kickSmoothed: 0,\r\n snareSmoothed: 0,\r\n hatSmoothed: 0,\r\n anySmoothed: 0,\r\n triggers: { any: false, kick: false, snare: false, hat: false },\r\n bpm: 120,\r\n confidence: 0,\r\n isLocked: false\r\n },\r\n spectral: {\r\n brightness: 0,\r\n flatness: 0\r\n },\r\n frequencyData: new Uint8Array(0),\r\n waveformData: new Float32Array(0)\r\n };\r\n\r\n // Device sensor state (internal device + external devices)\r\n private deviceState: {\r\n device: DeviceSensorState;\r\n devices: DeviceState[];\r\n } = {\r\n device: {\r\n motion: null,\r\n orientation: null\r\n },\r\n devices: []\r\n };\r\n\r\n // Map deviceId → streamIndex for O(1) device video lookup\r\n private deviceVideoMap = new Map<string, number>();\r\n\r\n // Video state is now managed by the worker-side VideoSystem\r\n \r\n // Artist API object\r\n public viji = {\r\n // Canvas (will be set during init)\r\n canvas: null as OffscreenCanvas | null,\r\n ctx: null as OffscreenCanvasRenderingContext2D | null,\r\n gl: null as WebGLRenderingContext | WebGL2RenderingContext | null,\r\n width: 0,\r\n height: 0,\r\n pixelRatio: 1,\r\n \r\n // Timing\r\n time: 0,\r\n deltaTime: 0,\r\n frameCount: 0,\r\n fps: 60,\r\n \r\n // Audio API (Phase 5) - will be set in constructor\r\n audio: {} as any,\r\n\r\n // Main video stream (index 0, CV enabled)\r\n video: {\r\n isConnected: false,\r\n currentFrame: null as OffscreenCanvas | null,\r\n frameWidth: 0,\r\n frameHeight: 0,\r\n frameRate: 0,\r\n getFrameData: () => null,\r\n faces: [] as any[],\r\n hands: [] as any[],\r\n pose: null,\r\n segmentation: null,\r\n cv: {\r\n enableFaceDetection: async () => {},\r\n disableFaceDetection: async () => {},\r\n enableFaceMesh: async () => {},\r\n disableFaceMesh: async () => {},\r\n enableEmotionDetection: async () => {},\r\n disableEmotionDetection: async () => {},\r\n enableHandTracking: async () => {},\r\n disableHandTracking: async () => {},\r\n enablePoseDetection: async () => {},\r\n disablePoseDetection: async () => {},\r\n enableBodySegmentation: async () => {},\r\n disableBodySegmentation: async () => {},\r\n getActiveFeatures: () => [] as string[],\r\n isProcessing: () => false,\r\n getStats: () => ({ activeFeatures: [], processingTime: 0, effectiveFPS: 0, actualFPS: 0, isProcessing: false }),\r\n getWorkerStatus: () => ({ healthy: false, restartCount: 0, maxRestarts: 3 }),\r\n restartWorker: async () => {},\r\n checkWebGLAvailability: () => false,\r\n getResourceUsage: () => ({ activeFeatures: 0, estimatedWebGLContexts: 0, webglAvailable: false })\r\n } as any\r\n },\r\n\r\n // Additional video streams (index 1+, no CV)\r\n streams: [] as any[],\r\n \r\n // Interaction APIs will be added during construction\r\n mouse: {} as any,\r\n keyboard: {} as any,\r\n touches: {} as any,\r\n \r\n // Device sensor APIs (internal device + external devices)\r\n device: {\r\n motion: null,\r\n orientation: null\r\n } as DeviceSensorState,\r\n devices: [] as DeviceState[],\r\n \r\n // Parameter helper functions (return parameter objects) - delegate to parameter system\r\n slider: (defaultValue: number, config: SliderConfig) => {\r\n return this.parameterSystem.createSliderParameter(defaultValue, config);\r\n },\r\n \r\n color: (defaultValue: string, config: ColorConfig) => {\r\n return this.parameterSystem.createColorParameter(defaultValue, config);\r\n },\r\n \r\n toggle: (defaultValue: boolean, config: ToggleConfig) => {\r\n return this.parameterSystem.createToggleParameter(defaultValue, config);\r\n },\r\n \r\n select: (defaultValue: string | number, config: SelectConfig) => {\r\n return this.parameterSystem.createSelectParameter(defaultValue, config);\r\n },\r\n \r\n text: (defaultValue: string, config: TextConfig) => {\r\n return this.parameterSystem.createTextParameter(defaultValue, config);\r\n },\r\n \r\n number: (defaultValue: number, config: NumberConfig) => {\r\n return this.parameterSystem.createNumberParameter(defaultValue, config);\r\n },\r\n \r\n image: (defaultValue: null, config: any) => {\r\n return this.parameterSystem.createImageParameter(defaultValue, config);\r\n },\r\n \r\n // Context selection\r\n useContext: (type: '2d' | 'webgl' | 'webgl2'): OffscreenCanvasRenderingContext2D | WebGLRenderingContext | WebGL2RenderingContext | null => {\r\n if (type === '2d') {\r\n if (!this.ctx && this.canvas) {\r\n this.ctx = this.canvas.getContext('2d');\r\n this.viji.ctx = this.ctx;\r\n }\r\n return this.ctx;\r\n } else if (type === 'webgl' || type === 'webgl2') {\r\n if (!this.gl && this.canvas) {\r\n this.gl = type === 'webgl2'\r\n ? this.canvas.getContext('webgl2')\r\n : this.canvas.getContext('webgl');\r\n this.viji.gl = this.gl;\r\n \r\n // Set initial WebGL viewport\r\n if (this.gl) {\r\n this.gl.viewport(0, 0, this.viji.width, this.viji.height);\r\n }\r\n }\r\n return this.gl;\r\n }\r\n return null;\r\n }\r\n };\r\n \r\n constructor() {\r\n // Initialize parameter system with post message callback\r\n this.parameterSystem = new ParameterSystem((type: string, data?: any) => {\r\n this.postMessage(type, data);\r\n });\r\n\r\n // Initialize interaction system\r\n this.interactionSystem = new InteractionSystem();\r\n\r\n // Video systems initialized dynamically as needed\r\n\r\n // Integrate APIs into viji object\r\n Object.assign(this.viji, this.interactionSystem.getInteractionAPIs());\r\n // viji.video and viji.streams are updated when video systems are set up\r\n\r\n // Initialize audio API with data access functions\r\n this.viji.audio = {\r\n ...this.audioState,\r\n getFrequencyData: () => this.audioState.frequencyData,\r\n getWaveform: () => this.audioState.waveformData\r\n };\r\n \r\n this.setupMessageHandling();\r\n }\r\n\r\n /**\r\n * Initialize P5.js mode\r\n * Sets up P5 rendering with P5WorkerAdapter\r\n */\r\n public async initP5Mode(setup: Function | null, render: Function): Promise<void> {\r\n try {\r\n this.rendererType = 'p5';\r\n this.debugLog('🎨 Initializing P5.js mode...');\r\n \r\n // Create adapter instance\r\n this.p5Adapter = new P5WorkerAdapter(\r\n this.canvas!,\r\n this.viji,\r\n { \r\n setup: setup as ((viji: any, p5: any) => void) | null, \r\n render: render as (viji: any, p5: any) => void \r\n }\r\n );\r\n \r\n // Initialize P5 (loads P5.js library from CDN)\r\n await this.p5Adapter.init();\r\n \r\n this.debugLog('✅ P5.js mode initialized successfully');\r\n } catch (error) {\r\n console.error('❌ Failed to initialize P5.js mode:', error);\r\n this.postMessage('error', {\r\n message: `P5.js initialization failed: ${(error as Error).message}`,\r\n code: 'P5_INIT_ERROR'\r\n });\r\n // Fall back to native mode on error\r\n this.rendererType = 'native';\r\n this.p5Adapter = null;\r\n }\r\n }\r\n \r\n /**\r\n * Initialize shader rendering mode\r\n * Used when artist code includes // @renderer shader\r\n */\r\n public async initShaderMode(shaderCode: string): Promise<void> {\r\n try {\r\n this.rendererType = 'shader';\r\n this.debugLog('🎨 Initializing Shader mode...');\r\n \r\n // Create adapter instance\r\n this.shaderAdapter = new ShaderWorkerAdapter(\r\n this.canvas!,\r\n this.viji,\r\n shaderCode\r\n );\r\n \r\n // Initialize (compile shader, setup WebGL)\r\n await this.shaderAdapter.init();\r\n \r\n // Get parameter definitions from shader and register them\r\n const parameterDefinitions = this.shaderAdapter.getParameterDefinitions();\r\n for (const param of parameterDefinitions) {\r\n // Register parameter using helper method based on type\r\n this.registerShaderParameter(param);\r\n }\r\n \r\n this.debugLog('✅ Shader mode initialized successfully');\r\n } catch (error) {\r\n console.error('❌ Failed to initialize Shader mode:', error);\r\n this.postMessage('error', {\r\n message: `Shader initialization failed: ${(error as Error).message}`,\r\n code: 'SHADER_INIT_ERROR'\r\n });\r\n // Fall back to native mode on error\r\n this.rendererType = 'native';\r\n this.shaderAdapter = null;\r\n }\r\n }\r\n \r\n /**\r\n * Register a shader parameter with the parameter system\r\n * In the parameter system, the 'label' serves as the parameter name/key\r\n */\r\n private registerShaderParameter(param: any): void {\r\n if (param.type === 'accumulator') return;\r\n \r\n const config = param.config;\r\n \r\n const paramConfig = {\r\n ...config,\r\n label: param.uniformName,\r\n description: config.label ? `${config.label}${config.description ? ': ' + config.description : ''}` : config.description\r\n };\r\n \r\n switch (param.type) {\r\n case 'slider':\r\n this.viji.slider(config.default, paramConfig);\r\n break;\r\n \r\n case 'number':\r\n this.viji.number(config.default, paramConfig);\r\n break;\r\n \r\n case 'color':\r\n this.viji.color(config.default, paramConfig);\r\n break;\r\n \r\n case 'toggle':\r\n this.viji.toggle(config.default, paramConfig);\r\n break;\r\n \r\n case 'select':\r\n this.viji.select(config.default, {\r\n ...paramConfig,\r\n options: config.options\r\n });\r\n break;\r\n \r\n case 'image':\r\n this.viji.image(null, paramConfig);\r\n break;\r\n }\r\n }\r\n\r\n // Reset parameter state (called when loading new scene)\r\n public resetParameterState(): void {\r\n this.parameterSystem.resetParameterState();\r\n this.interactionSystem.resetInteractionState();\r\n \r\n // Reset audio state\r\n this.audioState = {\r\n isConnected: false,\r\n volume: { current: 0, peak: 0, smoothed: 0 },\r\n bands: {\r\n low: 0, lowMid: 0, mid: 0, highMid: 0, high: 0,\r\n lowSmoothed: 0, lowMidSmoothed: 0, midSmoothed: 0, highMidSmoothed: 0, highSmoothed: 0\r\n },\r\n beat: {\r\n kick: 0,\r\n snare: 0,\r\n hat: 0,\r\n any: 0,\r\n kickSmoothed: 0,\r\n snareSmoothed: 0,\r\n hatSmoothed: 0,\r\n anySmoothed: 0,\r\n triggers: { any: false, kick: false, snare: false, hat: false },\r\n bpm: 120,\r\n confidence: 0,\r\n isLocked: false\r\n },\r\n spectral: {\r\n brightness: 0,\r\n flatness: 0\r\n },\r\n frequencyData: new Uint8Array(0),\r\n waveformData: new Float32Array(0)\r\n };\r\n // Update viji.audio reference\r\n this.viji.audio = {\r\n ...this.audioState,\r\n getFrequencyData: () => this.audioState.frequencyData,\r\n getWaveform: () => this.audioState.waveformData\r\n };\r\n\r\n // Reset all video systems (use optional chaining for sparse array safety)\r\n this.videoSystems.forEach(vs => vs?.resetVideoState());\r\n // Update viji.video reference (main stream)\r\n if (this.videoSystems[0]) {\r\n Object.assign(this.viji.video, this.videoSystems[0].getVideoAPI());\r\n }\r\n // Update viji.streams (additional streams)\r\n this.updateVijiStreams();\r\n }\r\n\r\n /**\r\n * Updates viji.streams from videoSystems array.\r\n * Collects 'additional' MediaStreams first, then 'directFrame' injected frames.\r\n * Excludes 'main' and 'device' streams (those go to viji.video and viji.devices[].video).\r\n */\r\n private updateVijiStreams(): void {\r\n const additional = this.videoSystems\r\n .filter(vs => vs && vs.getStreamType() === 'additional')\r\n .map(vs => vs.getVideoAPI());\r\n const directFrames = this.videoSystems\r\n .filter(vs => vs && vs.getStreamType() === 'directFrame')\r\n .map(vs => vs.getVideoAPI());\r\n const freshStreams = [...additional, ...directFrames];\r\n\r\n this.viji.streams.length = freshStreams.length;\r\n for (let i = 0; i < freshStreams.length; i++) {\r\n this.viji.streams[i] = freshStreams[i];\r\n }\r\n }\r\n\r\n // Send all parameters (from helper functions) to host\r\n public sendAllParametersToHost(): void {\r\n this.parameterSystem.sendAllParametersToHost();\r\n }\r\n \r\n private setupMessageHandling(): void {\r\n self.onmessage = (event: MessageEvent<WorkerMessage>) => {\r\n const message = event.data;\r\n \r\n switch (message.type) {\r\n case 'init':\r\n this.handleInit(message);\r\n break;\r\n case 'frame-rate-update':\r\n this.handleFrameRateUpdate(message);\r\n break;\r\n case 'refresh-rate-update':\r\n this.handleRefreshRateUpdate(message);\r\n break;\r\n case 'cv-frame-rate-update':\r\n this.handleCVFrameRateUpdate(message);\r\n break;\r\n case 'resolution-update':\r\n this.handleResolutionUpdate(message);\r\n break;\r\n case 'set-scene-code':\r\n this.handleSetSceneCode(message);\r\n break;\r\n case 'debug-mode':\r\n this.setDebugMode(message.data.enabled);\r\n break;\r\n case 'parameter-update':\r\n this.handleParameterUpdate(message);\r\n break;\r\n case 'parameter-batch-update':\r\n this.handleParameterBatchUpdate(message);\r\n break;\r\n case 'stream-update':\r\n this.handleStreamUpdate(message);\r\n break;\r\n case 'audio-analysis-update':\r\n this.handleAudioAnalysisUpdate(message);\r\n break;\r\n case 'video-canvas-setup':\r\n this.handleVideoCanvasSetup(message);\r\n break;\r\n case 'video-frame-update':\r\n this.handleVideoFrameUpdate(message);\r\n break;\r\n case 'video-config-update':\r\n this.handleVideoConfigUpdate(message);\r\n break;\r\n case 'video-streams-prepare':\r\n this.handleVideoStreamsPrepare(message);\r\n break;\r\n case 'video-frame-direct':\r\n this.handleVideoFrameDirect(message);\r\n break;\r\n case 'enable-auto-capture':\r\n this.autoCaptureEnabled = message.data.enabled;\r\n // Update format if provided (defaults to true if not specified)\r\n if (message.data.flipY !== undefined) {\r\n this.autoCaptureFormat.flipY = message.data.flipY;\r\n this.debugLog(`[AutoCapture] ${message.data.enabled ? 'ENABLED' : 'DISABLED'} with flipY=${message.data.flipY}`);\r\n } else {\r\n this.debugLog(`[AutoCapture] ${message.data.enabled ? 'ENABLED' : 'DISABLED'}`);\r\n }\r\n break;\r\n case 'mouse-update':\r\n this.handleMouseUpdate(message);\r\n break;\r\n case 'keyboard-update':\r\n this.handleKeyboardUpdate(message);\r\n break;\r\n case 'touch-update':\r\n this.handleTouchUpdate(message);\r\n break;\r\n case 'interaction-enabled':\r\n this.handleInteractionEnabled(message);\r\n break;\r\n case 'device-state-update':\r\n this.handleDeviceStateUpdate(message);\r\n break;\r\n case 'performance-update':\r\n this.handlePerformanceUpdate(message);\r\n break;\r\n case 'capture-frame':\r\n this.handleCaptureFrame(message as any);\r\n break;\r\n }\r\n };\r\n }\r\n \r\n private handleInit(message: WorkerInitMessage): void {\r\n try {\r\n this.canvas = message.data.canvas;\r\n this.viji.canvas = this.canvas;\r\n \r\n // Set initial effective resolution (same as canvas size initially)\r\n this.viji.width = this.canvas.width;\r\n this.viji.height = this.canvas.height;\r\n \r\n // Start render loop\r\n this.startRenderLoop();\r\n \r\n // Send response to init request (resolves the promise)\r\n this.postMessage('init-response', { \r\n id: message.id\r\n });\r\n } catch (error) {\r\n this.postMessage('error', {\r\n id: message.id,\r\n message: (error as Error).message,\r\n code: 'INIT_ERROR'\r\n });\r\n }\r\n }\r\n \r\n private handleFrameRateUpdate(message: WorkerFrameRateMessage): void {\r\n if (message.data && message.data.mode) {\r\n this.frameRateMode = message.data.mode;\r\n this.debugLog('Frame rate mode updated to:', message.data.mode);\r\n }\r\n }\r\n \r\n private handleRefreshRateUpdate(message: WorkerRefreshRateMessage): void {\r\n if (message.data && message.data.screenRefreshRate) {\r\n this.screenRefreshRate = message.data.screenRefreshRate;\r\n this.debugLog('Screen refresh rate updated to:', message.data.screenRefreshRate + 'Hz');\r\n }\r\n }\r\n\r\n private handleCVFrameRateUpdate(message: WorkerCVFrameRateMessage): void {\r\n if (message.data && message.data.mode) {\r\n // Calculate scene processing FPS based on current settings\r\n const sceneProcessingFPS = this.frameRateMode === 'full' ? this.screenRefreshRate : this.screenRefreshRate / 2;\r\n \r\n // Send CV frame rate configuration to main VideoSystem (index 0)\r\n if (this.videoSystems[0]) {\r\n this.videoSystems[0].handleVideoConfigUpdate({\r\n cvFrameRate: {\r\n mode: message.data.mode,\r\n sceneTargetFPS: sceneProcessingFPS\r\n },\r\n timestamp: performance.now()\r\n });\r\n }\r\n \r\n this.debugLog(`CV frame rate updated to: ${message.data.mode} of ${sceneProcessingFPS} FPS scene processing`);\r\n }\r\n }\r\n \r\n private trackEffectiveFrameTime(currentTime: number): void {\r\n // Keep track of actual render frame times\r\n this.effectiveFrameTimes.push(currentTime);\r\n \r\n // Keep only the last 60 frames for calculation (1 second at 60fps)\r\n if (this.effectiveFrameTimes.length > 60) {\r\n this.effectiveFrameTimes.shift();\r\n }\r\n }\r\n \r\n private reportPerformanceStats(currentTime: number): void {\r\n // Report performance stats every second\r\n if (currentTime - this.lastEffectiveRateReport >= this.effectiveRateReportInterval) {\r\n if (this.effectiveFrameTimes.length >= 2) {\r\n // Calculate effective refresh rate from actual frame times\r\n const totalTime = this.effectiveFrameTimes[this.effectiveFrameTimes.length - 1] - this.effectiveFrameTimes[0];\r\n const frameCount = this.effectiveFrameTimes.length - 1;\r\n const effectiveRefreshRate = Math.round((frameCount / totalTime) * 1000);\r\n \r\n // Get CV stats from main VideoSystem (index 0)\r\n const cvStats = this.videoSystems[0]?.getCVStats() || {\r\n activeFeatures: [],\r\n processingTime: 0,\r\n targetFPS: 0,\r\n actualFPS: 0,\r\n isProcessing: false\r\n };\r\n \r\n // Send comprehensive performance update to core\r\n this.postMessage('performance-update', {\r\n effectiveRefreshRate,\r\n frameRateMode: this.frameRateMode,\r\n screenRefreshRate: this.screenRefreshRate,\r\n rendererType: this.rendererType,\r\n parameterCount: this.parameterSystem.getParameterCount(),\r\n // Include CV stats if available\r\n cv: cvStats ? {\r\n activeFeatures: cvStats.activeFeatures,\r\n processingTime: cvStats.processingTime,\r\n targetFPS: cvStats.effectiveFPS,\r\n actualFPS: cvStats.actualFPS,\r\n isProcessing: cvStats.isProcessing\r\n } : undefined\r\n });\r\n }\r\n \r\n this.lastEffectiveRateReport = currentTime;\r\n }\r\n }\r\n \r\n private handleResolutionUpdate(message: WorkerResolutionMessage): void {\r\n if (message.data) {\r\n // Update canvas resolution directly (effective dimensions * scale)\r\n if (this.canvas) {\r\n this.canvas.width = Math.round(message.data.effectiveWidth);\r\n this.canvas.height = Math.round(message.data.effectiveHeight);\r\n }\r\n \r\n // Update viji dimensions to match actual canvas\r\n this.viji.width = Math.round(message.data.effectiveWidth);\r\n this.viji.height = Math.round(message.data.effectiveHeight);\r\n \r\n // Update WebGL viewport if context exists\r\n if (this.gl) {\r\n this.gl.viewport(0, 0, this.viji.width, this.viji.height);\r\n }\r\n \r\n // Update P5 canvas if in P5 mode\r\n if (this.p5Adapter && this.rendererType === 'p5') {\r\n this.p5Adapter.resize(this.viji.width, this.viji.height);\r\n }\r\n \r\n if (this.shaderAdapter && this.rendererType === 'shader') {\r\n this.shaderAdapter.resize(this.viji.width, this.viji.height);\r\n }\r\n \r\n this.debugLog('Canvas resolution updated to:', this.viji.width + 'x' + this.viji.height);\r\n }\r\n }\r\n \r\n private handleParameterUpdate(message: WorkerParameterMessage): void {\r\n if (message.data && message.data.name !== undefined && message.data.value !== undefined) {\r\n this.parameterSystem.updateParameterValue(message.data.name, message.data.value);\r\n }\r\n }\r\n\r\n private handleParameterBatchUpdate(message: WorkerParameterBatchMessage): void {\r\n if (message.data && message.data.updates) {\r\n for (const update of message.data.updates) {\r\n this.parameterSystem.updateParameterValue(update.name, update.value);\r\n }\r\n \r\n // Mark initial values as synced after first batch update\r\n this.parameterSystem.markInitialValuesSynced();\r\n this.debugLog('Parameter system initialized successfully');\r\n }\r\n }\r\n \r\n private handleStreamUpdate(message: WorkerStreamMessage): void {\r\n // TODO: Handle general stream updates (non-audio)\r\n this.debugLog('Stream update:', message.data);\r\n }\r\n \r\n private handleAudioAnalysisUpdate(message: WorkerAudioAnalysisMessage): void {\r\n // Convert events to boolean triggers for convenient artist API\r\n // This ensures triggers are reliable (never missed) even though we sample async\r\n const events = message.data.beat.events || [];\r\n const triggers = {\r\n kick: events.some(e => e.type === 'kick'),\r\n snare: events.some(e => e.type === 'snare'),\r\n hat: events.some(e => e.type === 'hat'),\r\n any: events.length > 0\r\n };\r\n \r\n // Handle audio analysis results from host\r\n this.audioState = {\r\n isConnected: message.data.isConnected,\r\n volume: message.data.volume,\r\n bands: message.data.bands,\r\n beat: {\r\n ...message.data.beat,\r\n triggers\r\n },\r\n spectral: message.data.spectral,\r\n frequencyData: new Uint8Array(message.data.frequencyData),\r\n waveformData: message.data.waveformData\r\n ? new Float32Array(message.data.waveformData)\r\n : new Float32Array(0)\r\n };\r\n \r\n // Update viji.audio API (artists get both triggers and events)\r\n this.viji.audio = {\r\n ...this.audioState,\r\n getFrequencyData: () => this.audioState.frequencyData,\r\n getWaveform: () => this.audioState.waveformData\r\n };\r\n }\r\n\r\n private handleVideoCanvasSetup(message: WorkerVideoCanvasSetupMessage): void {\r\n const { streamIndex, streamType, deviceId } = message.data;\r\n const index = streamIndex || 0;\r\n \r\n const videoSystem = new VideoSystem();\r\n videoSystem.setDebugMode(this.debugMode);\r\n \r\n // Set stream type and device ID\r\n videoSystem.setStreamType(streamType, deviceId);\r\n \r\n videoSystem.handleCanvasSetup({\r\n offscreenCanvas: message.data.offscreenCanvas,\r\n width: message.data.width,\r\n height: message.data.height,\r\n timestamp: message.data.timestamp\r\n });\r\n \r\n this.videoSystems[index] = videoSystem;\r\n this.debugLog(`Video system setup at index ${index}, type: ${streamType}${deviceId ? `, deviceId: ${deviceId}` : ''}`);\r\n \r\n // Update viji objects based on stream type\r\n switch (streamType) {\r\n case 'main':\r\n Object.assign(this.viji.video, videoSystem.getVideoAPI());\r\n break;\r\n case 'additional':\r\n this.updateVijiStreams();\r\n break;\r\n case 'device':\r\n if (deviceId) {\r\n // Store mapping for O(1) lookup\r\n this.deviceVideoMap.set(deviceId, index);\r\n // Try to assign immediately (may not exist yet if race condition - OK)\r\n const device = this.viji.devices.find(d => d.id === deviceId);\r\n if (device) {\r\n if (device.video) {\r\n Object.assign(device.video, videoSystem.getVideoAPI());\r\n } else {\r\n device.video = videoSystem.getVideoAPI();\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private handleVideoFrameUpdate(message: WorkerVideoFrameUpdateMessage): void {\r\n const index = message.data.streamIndex || 0;\r\n const vs = this.videoSystems[index];\r\n if (vs) {\r\n vs.handleFrameUpdate({\r\n imageBitmap: message.data.imageBitmap,\r\n timestamp: message.data.timestamp\r\n });\r\n \r\n // Update viji API based on stream type\r\n const streamType = vs.getStreamType();\r\n if (streamType === 'main') {\r\n Object.assign(this.viji.video, vs.getVideoAPI());\r\n } else if (streamType === 'device') {\r\n const deviceId = vs.getDeviceId();\r\n if (deviceId) {\r\n const device = this.viji.devices.find(d => d.id === deviceId);\r\n if (device) {\r\n if (device.video) {\r\n Object.assign(device.video, vs.getVideoAPI());\r\n } else {\r\n device.video = vs.getVideoAPI();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private handleVideoConfigUpdate(message: WorkerVideoConfigUpdateMessage): void {\r\n const index = message.data.streamIndex || 0;\r\n const vs = this.videoSystems[index];\r\n if (vs) {\r\n const streamType = vs.getStreamType();\r\n const deviceId = vs.getDeviceId();\r\n \r\n // Handle disconnect cleanup for device videos\r\n if (message.data.disconnect && streamType === 'device' && deviceId) {\r\n this.deviceVideoMap.delete(deviceId);\r\n const device = this.viji.devices.find(d => d.id === deviceId);\r\n if (device) {\r\n device.video = null;\r\n }\r\n }\r\n \r\n vs.handleVideoConfigUpdate({\r\n ...(message.data.targetFrameRate && { targetFrameRate: message.data.targetFrameRate }),\r\n ...(message.data.cvConfig && { cvConfig: message.data.cvConfig }),\r\n ...(message.data.width && { width: message.data.width }),\r\n ...(message.data.height && { height: message.data.height }),\r\n ...(message.data.disconnect && { disconnect: message.data.disconnect }),\r\n timestamp: message.data.timestamp\r\n });\r\n \r\n // Update viji API based on stream type (skip if disconnecting)\r\n if (!message.data.disconnect) {\r\n if (streamType === 'main') {\r\n Object.assign(this.viji.video, vs.getVideoAPI());\r\n } else if (streamType === 'device' && deviceId) {\r\n const device = this.viji.devices.find(d => d.id === deviceId);\r\n if (device) {\r\n if (device.video) {\r\n Object.assign(device.video, vs.getVideoAPI());\r\n } else {\r\n device.video = vs.getVideoAPI();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private handleVideoStreamsPrepare(message: any): void {\r\n const { directFrameBaseIndex, directFrameCount } = message.data;\r\n\r\n this.debugLog(`[Compositor] Preparing ${directFrameCount} direct frame slot(s) at base index ${directFrameBaseIndex}`);\r\n\r\n for (let i = 0; i < directFrameCount; i++) {\r\n const index = directFrameBaseIndex + i;\r\n if (!this.videoSystems[index]) {\r\n this.videoSystems[index] = new VideoSystem();\r\n }\r\n this.videoSystems[index].setDebugMode(this.debugMode);\r\n this.videoSystems[index].initializeForDirectFrames(this.rendererType);\r\n }\r\n\r\n this.updateVijiStreams();\r\n \r\n this.debugLog(`[Compositor] Prepared ${directFrameCount} direct frame slot(s)`);\r\n }\r\n\r\n private handleVideoFrameDirect(message: any): void {\r\n const index = message.data.streamIndex || 0;\r\n\r\n if (!this.videoSystems[index]) {\r\n this.debugLog(`[Compositor] Creating new VideoSystem at index ${index} for direct frames`);\r\n this.videoSystems[index] = new VideoSystem();\r\n this.videoSystems[index].setDebugMode(this.debugMode);\r\n this.videoSystems[index].initializeForDirectFrames(this.rendererType);\r\n }\r\n\r\n this.videoSystems[index].handleDirectFrame(message.data);\r\n\r\n // Note: updateVijiStreams() is called at start of each renderFrame(), no need to call here\r\n }\r\n\r\n private handlePerformanceUpdate(message: WorkerPerformanceMessage): void {\r\n // TODO: Handle performance updates in Phase 3\r\n this.debugLog('Performance update:', message.data);\r\n }\r\n\r\n /**\r\n * Handle capture-frame request from host.\r\n * Defers capture to immediately after the next render completes to avoid race conditions.\r\n */\r\n private async handleCaptureFrame(message: {\r\n type: 'capture-frame';\r\n id: string;\r\n data: { \r\n format?: 'blob' | 'bitmap';\r\n type?: string; \r\n resolution?: number | { width: number; height: number };\r\n };\r\n }): Promise<void> {\r\n // Queue the capture request - it will be executed immediately after next render\r\n this.pendingCaptures.push(message);\r\n this.debugLog(`Capture queued: ${message.data.format || 'blob'} (${this.pendingCaptures.length} pending)`);\r\n }\r\n\r\n /**\r\n * Execute a capture frame request immediately after render completes.\r\n * This ensures we capture a fully rendered frame, avoiding race conditions.\r\n */\r\n private async executeCaptureFrame(message: {\r\n type: 'capture-frame';\r\n id: string;\r\n data: { \r\n format?: 'blob' | 'bitmap';\r\n type?: string; \r\n resolution?: number | { width: number; height: number };\r\n };\r\n }): Promise<void> {\r\n try {\r\n if (!this.canvas) {\r\n throw new Error('Canvas not initialized');\r\n }\r\n\r\n const format = message.data.format || 'blob';\r\n\r\n // Bitmap format - use transferToImageBitmap (zero-copy!)\r\n if (format === 'bitmap') {\r\n const bitmap = this.canvas.transferToImageBitmap();\r\n \r\n (self as any).postMessage({\r\n type: 'capture-frame-result',\r\n id: message.id,\r\n timestamp: Date.now(),\r\n data: { bitmap }\r\n }, [bitmap]);\r\n \r\n return;\r\n }\r\n\r\n // Blob format (existing logic)\r\n const mimeType = message.data.type || 'image/jpeg';\r\n\r\n // Determine target width/height\r\n const srcWidth = this.canvas.width;\r\n const srcHeight = this.canvas.height;\r\n let targetWidth = srcWidth;\r\n let targetHeight = srcHeight;\r\n\r\n if (typeof message.data.resolution === 'number') {\r\n const scale = message.data.resolution > 0 ? message.data.resolution : 1;\r\n targetWidth = Math.max(1, Math.floor(srcWidth * scale));\r\n targetHeight = Math.max(1, Math.floor(srcHeight * scale));\r\n } else if (message.data.resolution && typeof message.data.resolution === 'object') {\r\n targetWidth = Math.max(1, Math.floor(message.data.resolution.width));\r\n targetHeight = Math.max(1, Math.floor(message.data.resolution.height));\r\n }\r\n\r\n // Compute source crop to match aspect ratio if needed\r\n const srcAspect = srcWidth / srcHeight;\r\n const dstAspect = targetWidth / targetHeight;\r\n let sx = 0;\r\n let sy = 0;\r\n let sWidth = srcWidth;\r\n let sHeight = srcHeight;\r\n\r\n if (Math.abs(srcAspect - dstAspect) > 1e-6) {\r\n if (dstAspect > srcAspect) {\r\n // Need to crop vertically (top/bottom)\r\n sHeight = Math.floor(srcWidth / dstAspect);\r\n sy = Math.floor((srcHeight - sHeight) / 2);\r\n } else {\r\n // Need to crop horizontally (left/right)\r\n sWidth = Math.floor(srcHeight * dstAspect);\r\n sx = Math.floor((srcWidth - sWidth) / 2);\r\n }\r\n }\r\n\r\n // Capture frame immediately after render completes\r\n // We're synchronized with the render loop, so the buffer contains fresh content\r\n let sourceCanvas: OffscreenCanvas;\r\n \r\n // Try to get WebGL context (returns existing context or null)\r\n // This works for all renderers because getContext returns the same instance\r\n const gl2 = this.canvas.getContext('webgl2') as WebGL2RenderingContext | null;\r\n const gl = gl2 || this.canvas.getContext('webgl') as WebGLRenderingContext | null;\r\n \r\n if (gl) {\r\n // WebGL path: Read pixels directly from framebuffer\r\n // No need for preserveDrawingBuffer: true since we're post-render\r\n gl.finish(); // Ensure all GPU operations are complete\r\n \r\n // Read pixels from the framebuffer\r\n const pixels = new Uint8Array(srcWidth * srcHeight * 4);\r\n gl.readPixels(0, 0, srcWidth, srcHeight, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\r\n \r\n // WebGL uses bottom-left origin, need to flip vertically\r\n const flippedPixels = new Uint8ClampedArray(srcWidth * srcHeight * 4);\r\n for (let y = 0; y < srcHeight; y++) {\r\n const srcRow = (srcHeight - 1 - y) * srcWidth * 4;\r\n const dstRow = y * srcWidth * 4;\r\n flippedPixels.set(pixels.subarray(srcRow, srcRow + srcWidth * 4), dstRow);\r\n }\r\n \r\n // Create a temp canvas and put the flipped pixels on it\r\n sourceCanvas = new OffscreenCanvas(srcWidth, srcHeight);\r\n const sourceCtx = sourceCanvas.getContext('2d');\r\n if (!sourceCtx) throw new Error('Failed to create source context');\r\n \r\n const imageData = new ImageData(flippedPixels, srcWidth, srcHeight);\r\n sourceCtx.putImageData(imageData, 0, 0);\r\n \r\n this.debugLog('Captured frame from WebGL using readPixels (post-render)');\r\n } else {\r\n // 2D Canvas path: Use the canvas directly\r\n sourceCanvas = this.canvas;\r\n this.debugLog('Captured frame from 2D canvas (post-render)');\r\n }\r\n\r\n // Now apply crop and scale to target resolution\r\n const temp = new OffscreenCanvas(targetWidth, targetHeight);\r\n const tctx = temp.getContext('2d');\r\n if (!tctx) throw new Error('Failed to get 2D context');\r\n \r\n // Draw with crop & scale\r\n tctx.drawImage(sourceCanvas, sx, sy, sWidth, sHeight, 0, 0, targetWidth, targetHeight);\r\n\r\n const blob = await temp.convertToBlob({ type: mimeType });\r\n\r\n // Send blob directly using structured clone\r\n // For thumbnails, the encoding time (~50-100ms) dominates,\r\n // so blob serialization overhead (~1-2ms) is negligible\r\n (self as any).postMessage({\r\n type: 'capture-frame-result',\r\n id: message.id,\r\n timestamp: Date.now(),\r\n data: { blob }\r\n });\r\n } catch (error) {\r\n this.postMessage('error', {\r\n id: message.id,\r\n message: (error as Error).message,\r\n code: 'CAPTURE_FRAME_ERROR'\r\n });\r\n }\r\n }\r\n \r\n private handleSetSceneCode(message: WorkerSetSceneCodeMessage): void {\r\n if (message.data && message.data.sceneCode) {\r\n // Delegate to global scene code function\r\n (self as any).setSceneCode(message.data.sceneCode);\r\n }\r\n }\r\n \r\n private startRenderLoop(): void {\r\n this.isRunning = true;\r\n this.startTime = performance.now();\r\n this.lastTime = this.startTime;\r\n this.renderFrame();\r\n }\r\n \r\n public renderFrame(): void {\r\n if (!this.isRunning) return;\r\n \r\n const currentTime = performance.now();\r\n \r\n // Update viji.streams snapshot before rendering to ensure artist code sees current state\r\n this.updateVijiStreams();\r\n \r\n // Update frame rate info\r\n this.viji.fps = this.frameRateMode === 'full' ? this.screenRefreshRate : this.screenRefreshRate / 2;\r\n \r\n // Check if we should render this frame\r\n let shouldRender = true;\r\n if (this.frameRateMode === 'half') {\r\n shouldRender = !this.skipNextFrame;\r\n this.skipNextFrame = !this.skipNextFrame;\r\n }\r\n \r\n if (shouldRender) {\r\n this.viji.deltaTime = (currentTime - this.lastTime) / 1000;\r\n this.viji.time = (currentTime - this.startTime) / 1000;\r\n this.viji.frameCount = ++this.frameCount;\r\n \r\n // Track effective frame times for performance calculation\r\n this.trackEffectiveFrameTime(currentTime);\r\n \r\n this.lastTime = currentTime;\r\n \r\n try {\r\n if (this.shaderAdapter && this.rendererType === 'shader') {\r\n // Shader mode: use shader adapter\r\n const parameterObjects = this.parameterSystem.getAllParameterObjects();\r\n this.shaderAdapter.render(this.viji, parameterObjects);\r\n } else if (this.p5Adapter && this.rendererType === 'p5') {\r\n // P5.js mode: use adapter and pass parameter objects\r\n const parameterObjects = this.parameterSystem.getAllParameterObjects();\r\n this.p5Adapter.tick(this.viji, parameterObjects);\r\n } else {\r\n // Native mode: call artist render function directly\r\n const renderFunction = (self as any).renderFunction;\r\n if (renderFunction && typeof renderFunction === 'function') {\r\n renderFunction(this.viji);\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Render error:', error);\r\n this.postMessage('error', {\r\n message: (error as Error).message,\r\n code: 'RENDER_ERROR',\r\n stack: (error as Error).stack\r\n });\r\n }\r\n \r\n // Process any pending capture requests immediately after render completes\r\n // This ensures we capture a fully rendered frame without race conditions\r\n if (this.pendingCaptures.length > 0) {\r\n // Process all pending captures (FIFO)\r\n const captures = [...this.pendingCaptures];\r\n this.pendingCaptures = []; // Clear queue\r\n\r\n // Execute captures (don't await - let them run async)\r\n for (const captureMsg of captures) {\r\n this.executeCaptureFrame(captureMsg).catch((error) => {\r\n console.error('Capture execution error:', error);\r\n });\r\n }\r\n }\r\n\r\n // Auto-capture for frame sources\r\n if (this.autoCaptureEnabled && this.canvas) {\r\n try {\r\n // Check if canvas has a context (scene must be loaded and rendering)\r\n const ctx = (this.canvas as any).getContext('2d') || (this.canvas as any).getContext('webgl2') || (this.canvas as any).getContext('webgl');\r\n if (ctx) {\r\n // Use format specified by consumer (mixer determines if Y-flip is needed)\r\n // WebGL consumers need Y-flip, Canvas 2D consumers don't\r\n const options = this.autoCaptureFormat.flipY \r\n ? { imageOrientation: 'flipY' as ImageOrientation }\r\n : {};\r\n \r\n createImageBitmap(this.canvas, options).then(bitmap => {\r\n (self as any).postMessage({\r\n type: 'auto-capture-result',\r\n timestamp: Date.now(),\r\n data: { bitmap, timestamp: performance.now() }\r\n }, [bitmap]);\r\n }).catch(err => {\r\n console.warn('[AutoCapture] ImageBitmap creation failed:', err);\r\n });\r\n } else {\r\n // Log occasionally to track context availability\r\n if (this.debugMode && this.frameCount % 60 === 0) {\r\n this.debugLog('[AutoCapture] No context yet, skipping capture');\r\n }\r\n }\r\n } catch (error) {\r\n console.warn('[AutoCapture] Failed:', error);\r\n }\r\n }\r\n }\r\n\r\n // Report effective refresh rate periodically\r\n this.reportPerformanceStats(currentTime);\r\n \r\n // Phase 7: Reset frame-based interaction events AFTER render\r\n // This ensures artist code sees accumulated events from between frames\r\n this.interactionSystem.frameStart();\r\n \r\n // Schedule next frame check\r\n requestAnimationFrame(() => this.renderFrame());\r\n }\r\n \r\n private postMessage(type: string, data?: any): void {\r\n self.postMessage({\r\n type,\r\n id: data?.id || `${type}_${Date.now()}`,\r\n timestamp: Date.now(),\r\n data\r\n });\r\n }\r\n\r\n // Phase 7: Interaction Message Handlers (delegated to InteractionSystem)\r\n\r\n private handleMouseUpdate(message: any): void {\r\n this.interactionSystem.handleMouseUpdate(message.data);\r\n }\r\n\r\n private handleKeyboardUpdate(message: any): void {\r\n this.interactionSystem.handleKeyboardUpdate(message.data);\r\n }\r\n\r\n private handleTouchUpdate(message: any): void {\r\n this.interactionSystem.handleTouchUpdate(message.data);\r\n }\r\n\r\n private handleInteractionEnabled(message: any): void {\r\n this.interactionSystem.setInteractionEnabled(message.data.enabled);\r\n }\r\n\r\n private handleDeviceStateUpdate(message: WorkerDeviceStateMessage): void {\r\n // Update device sensor state\r\n this.deviceState = message.data;\r\n \r\n // Update viji object for artist access\r\n this.viji.device = this.deviceState.device;\r\n \r\n // Build devices array preserving existing device objects for video stability\r\n // This prevents race conditions where video frame updates are lost due to object replacement\r\n const updatedDevices = this.deviceState.devices.map(deviceData => {\r\n const existingDevice = this.viji.devices.find(d => d.id === deviceData.id);\r\n \r\n if (existingDevice) {\r\n // Update sensor data in-place, preserve video reference\r\n existingDevice.name = deviceData.name;\r\n existingDevice.motion = deviceData.motion;\r\n existingDevice.orientation = deviceData.orientation;\r\n return existingDevice; // Reuse same object reference\r\n } else {\r\n // New device - create with video lookup\r\n const streamIndex = this.deviceVideoMap.get(deviceData.id);\r\n const videoSystem = streamIndex !== undefined \r\n ? this.videoSystems[streamIndex] \r\n : undefined;\r\n return {\r\n ...deviceData,\r\n video: videoSystem ? videoSystem.getVideoAPI() : null\r\n } as DeviceState;\r\n }\r\n });\r\n \r\n this.viji.devices = updatedDevices;\r\n }\r\n\r\n} ","/**\r\n * Scene code analysis utilities\r\n * Provides static methods for analyzing artist scene code\r\n */\r\n\r\nexport type RendererType = 'native' | 'p5' | 'shader';\r\n\r\n/**\r\n * Analyzes scene code for metadata and configuration\r\n */\r\nexport class SceneAnalyzer {\r\n /**\r\n * Detects the renderer type from scene code comments\r\n * \r\n * Looks for:\r\n * - // @renderer shader\r\n * - /* @renderer shader *\\/\r\n * - // @renderer p5\r\n * - /* @renderer p5 *\\/\r\n * \r\n * @param sceneCode - The artist's scene code to analyze\r\n * @returns The detected renderer type ('shader', 'p5', or 'native')\r\n */\r\n static detectRendererType(sceneCode: string): RendererType {\r\n // Check for // @renderer shader or /* @renderer shader */\r\n if (/\\/\\/\\s*@renderer\\s+shader|\\/\\*\\s*@renderer\\s+shader\\s*\\*\\//.test(sceneCode)) {\r\n return 'shader';\r\n }\r\n \r\n // Check for // @renderer p5 or /* @renderer p5 */\r\n if (/\\/\\/\\s*@renderer\\s+p5|\\/\\*\\s*@renderer\\s+p5\\s*\\*\\//.test(sceneCode)) {\r\n return 'p5';\r\n }\r\n \r\n return 'native';\r\n }\r\n}\r\n\r\n","export var ContextualKeyword; (function (ContextualKeyword) {\n const NONE = 0; ContextualKeyword[ContextualKeyword[\"NONE\"] = NONE] = \"NONE\";\n const _abstract = NONE + 1; ContextualKeyword[ContextualKeyword[\"_abstract\"] = _abstract] = \"_abstract\";\n const _accessor = _abstract + 1; ContextualKeyword[ContextualKeyword[\"_accessor\"] = _accessor] = \"_accessor\";\n const _as = _accessor + 1; ContextualKeyword[ContextualKeyword[\"_as\"] = _as] = \"_as\";\n const _assert = _as + 1; ContextualKeyword[ContextualKeyword[\"_assert\"] = _assert] = \"_assert\";\n const _asserts = _assert + 1; ContextualKeyword[ContextualKeyword[\"_asserts\"] = _asserts] = \"_asserts\";\n const _async = _asserts + 1; ContextualKeyword[ContextualKeyword[\"_async\"] = _async] = \"_async\";\n const _await = _async + 1; ContextualKeyword[ContextualKeyword[\"_await\"] = _await] = \"_await\";\n const _checks = _await + 1; ContextualKeyword[ContextualKeyword[\"_checks\"] = _checks] = \"_checks\";\n const _constructor = _checks + 1; ContextualKeyword[ContextualKeyword[\"_constructor\"] = _constructor] = \"_constructor\";\n const _declare = _constructor + 1; ContextualKeyword[ContextualKeyword[\"_declare\"] = _declare] = \"_declare\";\n const _enum = _declare + 1; ContextualKeyword[ContextualKeyword[\"_enum\"] = _enum] = \"_enum\";\n const _exports = _enum + 1; ContextualKeyword[ContextualKeyword[\"_exports\"] = _exports] = \"_exports\";\n const _from = _exports + 1; ContextualKeyword[ContextualKeyword[\"_from\"] = _from] = \"_from\";\n const _get = _from + 1; ContextualKeyword[ContextualKeyword[\"_get\"] = _get] = \"_get\";\n const _global = _get + 1; ContextualKeyword[ContextualKeyword[\"_global\"] = _global] = \"_global\";\n const _implements = _global + 1; ContextualKeyword[ContextualKeyword[\"_implements\"] = _implements] = \"_implements\";\n const _infer = _implements + 1; ContextualKeyword[ContextualKeyword[\"_infer\"] = _infer] = \"_infer\";\n const _interface = _infer + 1; ContextualKeyword[ContextualKeyword[\"_interface\"] = _interface] = \"_interface\";\n const _is = _interface + 1; ContextualKeyword[ContextualKeyword[\"_is\"] = _is] = \"_is\";\n const _keyof = _is + 1; ContextualKeyword[ContextualKeyword[\"_keyof\"] = _keyof] = \"_keyof\";\n const _mixins = _keyof + 1; ContextualKeyword[ContextualKeyword[\"_mixins\"] = _mixins] = \"_mixins\";\n const _module = _mixins + 1; ContextualKeyword[ContextualKeyword[\"_module\"] = _module] = \"_module\";\n const _namespace = _module + 1; ContextualKeyword[ContextualKeyword[\"_namespace\"] = _namespace] = \"_namespace\";\n const _of = _namespace + 1; ContextualKeyword[ContextualKeyword[\"_of\"] = _of] = \"_of\";\n const _opaque = _of + 1; ContextualKeyword[ContextualKeyword[\"_opaque\"] = _opaque] = \"_opaque\";\n const _out = _opaque + 1; ContextualKeyword[ContextualKeyword[\"_out\"] = _out] = \"_out\";\n const _override = _out + 1; ContextualKeyword[ContextualKeyword[\"_override\"] = _override] = \"_override\";\n const _private = _override + 1; ContextualKeyword[ContextualKeyword[\"_private\"] = _private] = \"_private\";\n const _protected = _private + 1; ContextualKeyword[ContextualKeyword[\"_protected\"] = _protected] = \"_protected\";\n const _proto = _protected + 1; ContextualKeyword[ContextualKeyword[\"_proto\"] = _proto] = \"_proto\";\n const _public = _proto + 1; ContextualKeyword[ContextualKeyword[\"_public\"] = _public] = \"_public\";\n const _readonly = _public + 1; ContextualKeyword[ContextualKeyword[\"_readonly\"] = _readonly] = \"_readonly\";\n const _require = _readonly + 1; ContextualKeyword[ContextualKeyword[\"_require\"] = _require] = \"_require\";\n const _satisfies = _require + 1; ContextualKeyword[ContextualKeyword[\"_satisfies\"] = _satisfies] = \"_satisfies\";\n const _set = _satisfies + 1; ContextualKeyword[ContextualKeyword[\"_set\"] = _set] = \"_set\";\n const _static = _set + 1; ContextualKeyword[ContextualKeyword[\"_static\"] = _static] = \"_static\";\n const _symbol = _static + 1; ContextualKeyword[ContextualKeyword[\"_symbol\"] = _symbol] = \"_symbol\";\n const _type = _symbol + 1; ContextualKeyword[ContextualKeyword[\"_type\"] = _type] = \"_type\";\n const _unique = _type + 1; ContextualKeyword[ContextualKeyword[\"_unique\"] = _unique] = \"_unique\";\n const _using = _unique + 1; ContextualKeyword[ContextualKeyword[\"_using\"] = _using] = \"_using\";\n})(ContextualKeyword || (ContextualKeyword = {}));\n","// Generated file, do not edit! Run \"yarn generate\" to re-generate this file.\n/* istanbul ignore file */\n/**\n * Enum of all token types, with bit fields to signify meaningful properties.\n */\nexport var TokenType; (function (TokenType) {\n // Precedence 0 means not an operator; otherwise it is a positive number up to 12.\n const PRECEDENCE_MASK = 0xf; TokenType[TokenType[\"PRECEDENCE_MASK\"] = PRECEDENCE_MASK] = \"PRECEDENCE_MASK\";\n const IS_KEYWORD = 1 << 4; TokenType[TokenType[\"IS_KEYWORD\"] = IS_KEYWORD] = \"IS_KEYWORD\";\n const IS_ASSIGN = 1 << 5; TokenType[TokenType[\"IS_ASSIGN\"] = IS_ASSIGN] = \"IS_ASSIGN\";\n const IS_RIGHT_ASSOCIATIVE = 1 << 6; TokenType[TokenType[\"IS_RIGHT_ASSOCIATIVE\"] = IS_RIGHT_ASSOCIATIVE] = \"IS_RIGHT_ASSOCIATIVE\";\n const IS_PREFIX = 1 << 7; TokenType[TokenType[\"IS_PREFIX\"] = IS_PREFIX] = \"IS_PREFIX\";\n const IS_POSTFIX = 1 << 8; TokenType[TokenType[\"IS_POSTFIX\"] = IS_POSTFIX] = \"IS_POSTFIX\";\n const IS_EXPRESSION_START = 1 << 9; TokenType[TokenType[\"IS_EXPRESSION_START\"] = IS_EXPRESSION_START] = \"IS_EXPRESSION_START\";\n\n const num = 512; TokenType[TokenType[\"num\"] = num] = \"num\"; // num startsExpr\n const bigint = 1536; TokenType[TokenType[\"bigint\"] = bigint] = \"bigint\"; // bigint startsExpr\n const decimal = 2560; TokenType[TokenType[\"decimal\"] = decimal] = \"decimal\"; // decimal startsExpr\n const regexp = 3584; TokenType[TokenType[\"regexp\"] = regexp] = \"regexp\"; // regexp startsExpr\n const string = 4608; TokenType[TokenType[\"string\"] = string] = \"string\"; // string startsExpr\n const name = 5632; TokenType[TokenType[\"name\"] = name] = \"name\"; // name startsExpr\n const eof = 6144; TokenType[TokenType[\"eof\"] = eof] = \"eof\"; // eof\n const bracketL = 7680; TokenType[TokenType[\"bracketL\"] = bracketL] = \"bracketL\"; // [ startsExpr\n const bracketR = 8192; TokenType[TokenType[\"bracketR\"] = bracketR] = \"bracketR\"; // ]\n const braceL = 9728; TokenType[TokenType[\"braceL\"] = braceL] = \"braceL\"; // { startsExpr\n const braceBarL = 10752; TokenType[TokenType[\"braceBarL\"] = braceBarL] = \"braceBarL\"; // {| startsExpr\n const braceR = 11264; TokenType[TokenType[\"braceR\"] = braceR] = \"braceR\"; // }\n const braceBarR = 12288; TokenType[TokenType[\"braceBarR\"] = braceBarR] = \"braceBarR\"; // |}\n const parenL = 13824; TokenType[TokenType[\"parenL\"] = parenL] = \"parenL\"; // ( startsExpr\n const parenR = 14336; TokenType[TokenType[\"parenR\"] = parenR] = \"parenR\"; // )\n const comma = 15360; TokenType[TokenType[\"comma\"] = comma] = \"comma\"; // ,\n const semi = 16384; TokenType[TokenType[\"semi\"] = semi] = \"semi\"; // ;\n const colon = 17408; TokenType[TokenType[\"colon\"] = colon] = \"colon\"; // :\n const doubleColon = 18432; TokenType[TokenType[\"doubleColon\"] = doubleColon] = \"doubleColon\"; // ::\n const dot = 19456; TokenType[TokenType[\"dot\"] = dot] = \"dot\"; // .\n const question = 20480; TokenType[TokenType[\"question\"] = question] = \"question\"; // ?\n const questionDot = 21504; TokenType[TokenType[\"questionDot\"] = questionDot] = \"questionDot\"; // ?.\n const arrow = 22528; TokenType[TokenType[\"arrow\"] = arrow] = \"arrow\"; // =>\n const template = 23552; TokenType[TokenType[\"template\"] = template] = \"template\"; // template\n const ellipsis = 24576; TokenType[TokenType[\"ellipsis\"] = ellipsis] = \"ellipsis\"; // ...\n const backQuote = 25600; TokenType[TokenType[\"backQuote\"] = backQuote] = \"backQuote\"; // `\n const dollarBraceL = 27136; TokenType[TokenType[\"dollarBraceL\"] = dollarBraceL] = \"dollarBraceL\"; // ${ startsExpr\n const at = 27648; TokenType[TokenType[\"at\"] = at] = \"at\"; // @\n const hash = 29184; TokenType[TokenType[\"hash\"] = hash] = \"hash\"; // # startsExpr\n const eq = 29728; TokenType[TokenType[\"eq\"] = eq] = \"eq\"; // = isAssign\n const assign = 30752; TokenType[TokenType[\"assign\"] = assign] = \"assign\"; // _= isAssign\n const preIncDec = 32640; TokenType[TokenType[\"preIncDec\"] = preIncDec] = \"preIncDec\"; // ++/-- prefix postfix startsExpr\n const postIncDec = 33664; TokenType[TokenType[\"postIncDec\"] = postIncDec] = \"postIncDec\"; // ++/-- prefix postfix startsExpr\n const bang = 34432; TokenType[TokenType[\"bang\"] = bang] = \"bang\"; // ! prefix startsExpr\n const tilde = 35456; TokenType[TokenType[\"tilde\"] = tilde] = \"tilde\"; // ~ prefix startsExpr\n const pipeline = 35841; TokenType[TokenType[\"pipeline\"] = pipeline] = \"pipeline\"; // |> prec:1\n const nullishCoalescing = 36866; TokenType[TokenType[\"nullishCoalescing\"] = nullishCoalescing] = \"nullishCoalescing\"; // ?? prec:2\n const logicalOR = 37890; TokenType[TokenType[\"logicalOR\"] = logicalOR] = \"logicalOR\"; // || prec:2\n const logicalAND = 38915; TokenType[TokenType[\"logicalAND\"] = logicalAND] = \"logicalAND\"; // && prec:3\n const bitwiseOR = 39940; TokenType[TokenType[\"bitwiseOR\"] = bitwiseOR] = \"bitwiseOR\"; // | prec:4\n const bitwiseXOR = 40965; TokenType[TokenType[\"bitwiseXOR\"] = bitwiseXOR] = \"bitwiseXOR\"; // ^ prec:5\n const bitwiseAND = 41990; TokenType[TokenType[\"bitwiseAND\"] = bitwiseAND] = \"bitwiseAND\"; // & prec:6\n const equality = 43015; TokenType[TokenType[\"equality\"] = equality] = \"equality\"; // ==/!= prec:7\n const lessThan = 44040; TokenType[TokenType[\"lessThan\"] = lessThan] = \"lessThan\"; // < prec:8\n const greaterThan = 45064; TokenType[TokenType[\"greaterThan\"] = greaterThan] = \"greaterThan\"; // > prec:8\n const relationalOrEqual = 46088; TokenType[TokenType[\"relationalOrEqual\"] = relationalOrEqual] = \"relationalOrEqual\"; // <=/>= prec:8\n const bitShiftL = 47113; TokenType[TokenType[\"bitShiftL\"] = bitShiftL] = \"bitShiftL\"; // << prec:9\n const bitShiftR = 48137; TokenType[TokenType[\"bitShiftR\"] = bitShiftR] = \"bitShiftR\"; // >>/>>> prec:9\n const plus = 49802; TokenType[TokenType[\"plus\"] = plus] = \"plus\"; // + prec:10 prefix startsExpr\n const minus = 50826; TokenType[TokenType[\"minus\"] = minus] = \"minus\"; // - prec:10 prefix startsExpr\n const modulo = 51723; TokenType[TokenType[\"modulo\"] = modulo] = \"modulo\"; // % prec:11 startsExpr\n const star = 52235; TokenType[TokenType[\"star\"] = star] = \"star\"; // * prec:11\n const slash = 53259; TokenType[TokenType[\"slash\"] = slash] = \"slash\"; // / prec:11\n const exponent = 54348; TokenType[TokenType[\"exponent\"] = exponent] = \"exponent\"; // ** prec:12 rightAssociative\n const jsxName = 55296; TokenType[TokenType[\"jsxName\"] = jsxName] = \"jsxName\"; // jsxName\n const jsxText = 56320; TokenType[TokenType[\"jsxText\"] = jsxText] = \"jsxText\"; // jsxText\n const jsxEmptyText = 57344; TokenType[TokenType[\"jsxEmptyText\"] = jsxEmptyText] = \"jsxEmptyText\"; // jsxEmptyText\n const jsxTagStart = 58880; TokenType[TokenType[\"jsxTagStart\"] = jsxTagStart] = \"jsxTagStart\"; // jsxTagStart startsExpr\n const jsxTagEnd = 59392; TokenType[TokenType[\"jsxTagEnd\"] = jsxTagEnd] = \"jsxTagEnd\"; // jsxTagEnd\n const typeParameterStart = 60928; TokenType[TokenType[\"typeParameterStart\"] = typeParameterStart] = \"typeParameterStart\"; // typeParameterStart startsExpr\n const nonNullAssertion = 61440; TokenType[TokenType[\"nonNullAssertion\"] = nonNullAssertion] = \"nonNullAssertion\"; // nonNullAssertion\n const _break = 62480; TokenType[TokenType[\"_break\"] = _break] = \"_break\"; // break keyword\n const _case = 63504; TokenType[TokenType[\"_case\"] = _case] = \"_case\"; // case keyword\n const _catch = 64528; TokenType[TokenType[\"_catch\"] = _catch] = \"_catch\"; // catch keyword\n const _continue = 65552; TokenType[TokenType[\"_continue\"] = _continue] = \"_continue\"; // continue keyword\n const _debugger = 66576; TokenType[TokenType[\"_debugger\"] = _debugger] = \"_debugger\"; // debugger keyword\n const _default = 67600; TokenType[TokenType[\"_default\"] = _default] = \"_default\"; // default keyword\n const _do = 68624; TokenType[TokenType[\"_do\"] = _do] = \"_do\"; // do keyword\n const _else = 69648; TokenType[TokenType[\"_else\"] = _else] = \"_else\"; // else keyword\n const _finally = 70672; TokenType[TokenType[\"_finally\"] = _finally] = \"_finally\"; // finally keyword\n const _for = 71696; TokenType[TokenType[\"_for\"] = _for] = \"_for\"; // for keyword\n const _function = 73232; TokenType[TokenType[\"_function\"] = _function] = \"_function\"; // function keyword startsExpr\n const _if = 73744; TokenType[TokenType[\"_if\"] = _if] = \"_if\"; // if keyword\n const _return = 74768; TokenType[TokenType[\"_return\"] = _return] = \"_return\"; // return keyword\n const _switch = 75792; TokenType[TokenType[\"_switch\"] = _switch] = \"_switch\"; // switch keyword\n const _throw = 77456; TokenType[TokenType[\"_throw\"] = _throw] = \"_throw\"; // throw keyword prefix startsExpr\n const _try = 77840; TokenType[TokenType[\"_try\"] = _try] = \"_try\"; // try keyword\n const _var = 78864; TokenType[TokenType[\"_var\"] = _var] = \"_var\"; // var keyword\n const _let = 79888; TokenType[TokenType[\"_let\"] = _let] = \"_let\"; // let keyword\n const _const = 80912; TokenType[TokenType[\"_const\"] = _const] = \"_const\"; // const keyword\n const _while = 81936; TokenType[TokenType[\"_while\"] = _while] = \"_while\"; // while keyword\n const _with = 82960; TokenType[TokenType[\"_with\"] = _with] = \"_with\"; // with keyword\n const _new = 84496; TokenType[TokenType[\"_new\"] = _new] = \"_new\"; // new keyword startsExpr\n const _this = 85520; TokenType[TokenType[\"_this\"] = _this] = \"_this\"; // this keyword startsExpr\n const _super = 86544; TokenType[TokenType[\"_super\"] = _super] = \"_super\"; // super keyword startsExpr\n const _class = 87568; TokenType[TokenType[\"_class\"] = _class] = \"_class\"; // class keyword startsExpr\n const _extends = 88080; TokenType[TokenType[\"_extends\"] = _extends] = \"_extends\"; // extends keyword\n const _export = 89104; TokenType[TokenType[\"_export\"] = _export] = \"_export\"; // export keyword\n const _import = 90640; TokenType[TokenType[\"_import\"] = _import] = \"_import\"; // import keyword startsExpr\n const _yield = 91664; TokenType[TokenType[\"_yield\"] = _yield] = \"_yield\"; // yield keyword startsExpr\n const _null = 92688; TokenType[TokenType[\"_null\"] = _null] = \"_null\"; // null keyword startsExpr\n const _true = 93712; TokenType[TokenType[\"_true\"] = _true] = \"_true\"; // true keyword startsExpr\n const _false = 94736; TokenType[TokenType[\"_false\"] = _false] = \"_false\"; // false keyword startsExpr\n const _in = 95256; TokenType[TokenType[\"_in\"] = _in] = \"_in\"; // in prec:8 keyword\n const _instanceof = 96280; TokenType[TokenType[\"_instanceof\"] = _instanceof] = \"_instanceof\"; // instanceof prec:8 keyword\n const _typeof = 97936; TokenType[TokenType[\"_typeof\"] = _typeof] = \"_typeof\"; // typeof keyword prefix startsExpr\n const _void = 98960; TokenType[TokenType[\"_void\"] = _void] = \"_void\"; // void keyword prefix startsExpr\n const _delete = 99984; TokenType[TokenType[\"_delete\"] = _delete] = \"_delete\"; // delete keyword prefix startsExpr\n const _async = 100880; TokenType[TokenType[\"_async\"] = _async] = \"_async\"; // async keyword startsExpr\n const _get = 101904; TokenType[TokenType[\"_get\"] = _get] = \"_get\"; // get keyword startsExpr\n const _set = 102928; TokenType[TokenType[\"_set\"] = _set] = \"_set\"; // set keyword startsExpr\n const _declare = 103952; TokenType[TokenType[\"_declare\"] = _declare] = \"_declare\"; // declare keyword startsExpr\n const _readonly = 104976; TokenType[TokenType[\"_readonly\"] = _readonly] = \"_readonly\"; // readonly keyword startsExpr\n const _abstract = 106000; TokenType[TokenType[\"_abstract\"] = _abstract] = \"_abstract\"; // abstract keyword startsExpr\n const _static = 107024; TokenType[TokenType[\"_static\"] = _static] = \"_static\"; // static keyword startsExpr\n const _public = 107536; TokenType[TokenType[\"_public\"] = _public] = \"_public\"; // public keyword\n const _private = 108560; TokenType[TokenType[\"_private\"] = _private] = \"_private\"; // private keyword\n const _protected = 109584; TokenType[TokenType[\"_protected\"] = _protected] = \"_protected\"; // protected keyword\n const _override = 110608; TokenType[TokenType[\"_override\"] = _override] = \"_override\"; // override keyword\n const _as = 112144; TokenType[TokenType[\"_as\"] = _as] = \"_as\"; // as keyword startsExpr\n const _enum = 113168; TokenType[TokenType[\"_enum\"] = _enum] = \"_enum\"; // enum keyword startsExpr\n const _type = 114192; TokenType[TokenType[\"_type\"] = _type] = \"_type\"; // type keyword startsExpr\n const _implements = 115216; TokenType[TokenType[\"_implements\"] = _implements] = \"_implements\"; // implements keyword startsExpr\n})(TokenType || (TokenType = {}));\nexport function formatTokenType(tokenType) {\n switch (tokenType) {\n case TokenType.num:\n return \"num\";\n case TokenType.bigint:\n return \"bigint\";\n case TokenType.decimal:\n return \"decimal\";\n case TokenType.regexp:\n return \"regexp\";\n case TokenType.string:\n return \"string\";\n case TokenType.name:\n return \"name\";\n case TokenType.eof:\n return \"eof\";\n case TokenType.bracketL:\n return \"[\";\n case TokenType.bracketR:\n return \"]\";\n case TokenType.braceL:\n return \"{\";\n case TokenType.braceBarL:\n return \"{|\";\n case TokenType.braceR:\n return \"}\";\n case TokenType.braceBarR:\n return \"|}\";\n case TokenType.parenL:\n return \"(\";\n case TokenType.parenR:\n return \")\";\n case TokenType.comma:\n return \",\";\n case TokenType.semi:\n return \";\";\n case TokenType.colon:\n return \":\";\n case TokenType.doubleColon:\n return \"::\";\n case TokenType.dot:\n return \".\";\n case TokenType.question:\n return \"?\";\n case TokenType.questionDot:\n return \"?.\";\n case TokenType.arrow:\n return \"=>\";\n case TokenType.template:\n return \"template\";\n case TokenType.ellipsis:\n return \"...\";\n case TokenType.backQuote:\n return \"`\";\n case TokenType.dollarBraceL:\n return \"${\";\n case TokenType.at:\n return \"@\";\n case TokenType.hash:\n return \"#\";\n case TokenType.eq:\n return \"=\";\n case TokenType.assign:\n return \"_=\";\n case TokenType.preIncDec:\n return \"++/--\";\n case TokenType.postIncDec:\n return \"++/--\";\n case TokenType.bang:\n return \"!\";\n case TokenType.tilde:\n return \"~\";\n case TokenType.pipeline:\n return \"|>\";\n case TokenType.nullishCoalescing:\n return \"??\";\n case TokenType.logicalOR:\n return \"||\";\n case TokenType.logicalAND:\n return \"&&\";\n case TokenType.bitwiseOR:\n return \"|\";\n case TokenType.bitwiseXOR:\n return \"^\";\n case TokenType.bitwiseAND:\n return \"&\";\n case TokenType.equality:\n return \"==/!=\";\n case TokenType.lessThan:\n return \"<\";\n case TokenType.greaterThan:\n return \">\";\n case TokenType.relationalOrEqual:\n return \"<=/>=\";\n case TokenType.bitShiftL:\n return \"<<\";\n case TokenType.bitShiftR:\n return \">>/>>>\";\n case TokenType.plus:\n return \"+\";\n case TokenType.minus:\n return \"-\";\n case TokenType.modulo:\n return \"%\";\n case TokenType.star:\n return \"*\";\n case TokenType.slash:\n return \"/\";\n case TokenType.exponent:\n return \"**\";\n case TokenType.jsxName:\n return \"jsxName\";\n case TokenType.jsxText:\n return \"jsxText\";\n case TokenType.jsxEmptyText:\n return \"jsxEmptyText\";\n case TokenType.jsxTagStart:\n return \"jsxTagStart\";\n case TokenType.jsxTagEnd:\n return \"jsxTagEnd\";\n case TokenType.typeParameterStart:\n return \"typeParameterStart\";\n case TokenType.nonNullAssertion:\n return \"nonNullAssertion\";\n case TokenType._break:\n return \"break\";\n case TokenType._case:\n return \"case\";\n case TokenType._catch:\n return \"catch\";\n case TokenType._continue:\n return \"continue\";\n case TokenType._debugger:\n return \"debugger\";\n case TokenType._default:\n return \"default\";\n case TokenType._do:\n return \"do\";\n case TokenType._else:\n return \"else\";\n case TokenType._finally:\n return \"finally\";\n case TokenType._for:\n return \"for\";\n case TokenType._function:\n return \"function\";\n case TokenType._if:\n return \"if\";\n case TokenType._return:\n return \"return\";\n case TokenType._switch:\n return \"switch\";\n case TokenType._throw:\n return \"throw\";\n case TokenType._try:\n return \"try\";\n case TokenType._var:\n return \"var\";\n case TokenType._let:\n return \"let\";\n case TokenType._const:\n return \"const\";\n case TokenType._while:\n return \"while\";\n case TokenType._with:\n return \"with\";\n case TokenType._new:\n return \"new\";\n case TokenType._this:\n return \"this\";\n case TokenType._super:\n return \"super\";\n case TokenType._class:\n return \"class\";\n case TokenType._extends:\n return \"extends\";\n case TokenType._export:\n return \"export\";\n case TokenType._import:\n return \"import\";\n case TokenType._yield:\n return \"yield\";\n case TokenType._null:\n return \"null\";\n case TokenType._true:\n return \"true\";\n case TokenType._false:\n return \"false\";\n case TokenType._in:\n return \"in\";\n case TokenType._instanceof:\n return \"instanceof\";\n case TokenType._typeof:\n return \"typeof\";\n case TokenType._void:\n return \"void\";\n case TokenType._delete:\n return \"delete\";\n case TokenType._async:\n return \"async\";\n case TokenType._get:\n return \"get\";\n case TokenType._set:\n return \"set\";\n case TokenType._declare:\n return \"declare\";\n case TokenType._readonly:\n return \"readonly\";\n case TokenType._abstract:\n return \"abstract\";\n case TokenType._static:\n return \"static\";\n case TokenType._public:\n return \"public\";\n case TokenType._private:\n return \"private\";\n case TokenType._protected:\n return \"protected\";\n case TokenType._override:\n return \"override\";\n case TokenType._as:\n return \"as\";\n case TokenType._enum:\n return \"enum\";\n case TokenType._type:\n return \"type\";\n case TokenType._implements:\n return \"implements\";\n default:\n return \"\";\n }\n}\n","\nimport {ContextualKeyword} from \"./keywords\";\nimport { TokenType as tt} from \"./types\";\n\nexport class Scope {\n \n \n \n\n constructor(startTokenIndex, endTokenIndex, isFunctionScope) {\n this.startTokenIndex = startTokenIndex;\n this.endTokenIndex = endTokenIndex;\n this.isFunctionScope = isFunctionScope;\n }\n}\n\nexport class StateSnapshot {\n constructor(\n potentialArrowAt,\n noAnonFunctionType,\n inDisallowConditionalTypesContext,\n tokensLength,\n scopesLength,\n pos,\n type,\n contextualKeyword,\n start,\n end,\n isType,\n scopeDepth,\n error,\n ) {;this.potentialArrowAt = potentialArrowAt;this.noAnonFunctionType = noAnonFunctionType;this.inDisallowConditionalTypesContext = inDisallowConditionalTypesContext;this.tokensLength = tokensLength;this.scopesLength = scopesLength;this.pos = pos;this.type = type;this.contextualKeyword = contextualKeyword;this.start = start;this.end = end;this.isType = isType;this.scopeDepth = scopeDepth;this.error = error;}\n}\n\nexport default class State {constructor() { State.prototype.__init.call(this);State.prototype.__init2.call(this);State.prototype.__init3.call(this);State.prototype.__init4.call(this);State.prototype.__init5.call(this);State.prototype.__init6.call(this);State.prototype.__init7.call(this);State.prototype.__init8.call(this);State.prototype.__init9.call(this);State.prototype.__init10.call(this);State.prototype.__init11.call(this);State.prototype.__init12.call(this);State.prototype.__init13.call(this); }\n // Used to signify the start of a potential arrow function\n __init() {this.potentialArrowAt = -1}\n\n // Used by Flow to handle an edge case involving function type parsing.\n __init2() {this.noAnonFunctionType = false}\n\n // Used by TypeScript to handle ambiguities when parsing conditional types.\n __init3() {this.inDisallowConditionalTypesContext = false}\n\n // Token store.\n __init4() {this.tokens = []}\n\n // Array of all observed scopes, ordered by their ending position.\n __init5() {this.scopes = []}\n\n // The current position of the tokenizer in the input.\n __init6() {this.pos = 0}\n\n // Information about the current token.\n __init7() {this.type = tt.eof}\n __init8() {this.contextualKeyword = ContextualKeyword.NONE}\n __init9() {this.start = 0}\n __init10() {this.end = 0}\n\n __init11() {this.isType = false}\n __init12() {this.scopeDepth = 0}\n\n /**\n * If the parser is in an error state, then the token is always tt.eof and all functions can\n * keep executing but should be written so they don't get into an infinite loop in this situation.\n *\n * This approach, combined with the ability to snapshot and restore state, allows us to implement\n * backtracking without exceptions and without needing to explicitly propagate error states\n * everywhere.\n */\n __init13() {this.error = null}\n\n snapshot() {\n return new StateSnapshot(\n this.potentialArrowAt,\n this.noAnonFunctionType,\n this.inDisallowConditionalTypesContext,\n this.tokens.length,\n this.scopes.length,\n this.pos,\n this.type,\n this.contextualKeyword,\n this.start,\n this.end,\n this.isType,\n this.scopeDepth,\n this.error,\n );\n }\n\n restoreFromSnapshot(snapshot) {\n this.potentialArrowAt = snapshot.potentialArrowAt;\n this.noAnonFunctionType = snapshot.noAnonFunctionType;\n this.inDisallowConditionalTypesContext = snapshot.inDisallowConditionalTypesContext;\n this.tokens.length = snapshot.tokensLength;\n this.scopes.length = snapshot.scopesLength;\n this.pos = snapshot.pos;\n this.type = snapshot.type;\n this.contextualKeyword = snapshot.contextualKeyword;\n this.start = snapshot.start;\n this.end = snapshot.end;\n this.isType = snapshot.isType;\n this.scopeDepth = snapshot.scopeDepth;\n this.error = snapshot.error;\n }\n}\n","export var charCodes; (function (charCodes) {\n const backSpace = 8; charCodes[charCodes[\"backSpace\"] = backSpace] = \"backSpace\";\n const lineFeed = 10; charCodes[charCodes[\"lineFeed\"] = lineFeed] = \"lineFeed\"; // '\\n'\n const tab = 9; charCodes[charCodes[\"tab\"] = tab] = \"tab\"; // '\\t'\n const carriageReturn = 13; charCodes[charCodes[\"carriageReturn\"] = carriageReturn] = \"carriageReturn\"; // '\\r'\n const shiftOut = 14; charCodes[charCodes[\"shiftOut\"] = shiftOut] = \"shiftOut\";\n const space = 32; charCodes[charCodes[\"space\"] = space] = \"space\";\n const exclamationMark = 33; charCodes[charCodes[\"exclamationMark\"] = exclamationMark] = \"exclamationMark\"; // '!'\n const quotationMark = 34; charCodes[charCodes[\"quotationMark\"] = quotationMark] = \"quotationMark\"; // '\"'\n const numberSign = 35; charCodes[charCodes[\"numberSign\"] = numberSign] = \"numberSign\"; // '#'\n const dollarSign = 36; charCodes[charCodes[\"dollarSign\"] = dollarSign] = \"dollarSign\"; // '$'\n const percentSign = 37; charCodes[charCodes[\"percentSign\"] = percentSign] = \"percentSign\"; // '%'\n const ampersand = 38; charCodes[charCodes[\"ampersand\"] = ampersand] = \"ampersand\"; // '&'\n const apostrophe = 39; charCodes[charCodes[\"apostrophe\"] = apostrophe] = \"apostrophe\"; // '''\n const leftParenthesis = 40; charCodes[charCodes[\"leftParenthesis\"] = leftParenthesis] = \"leftParenthesis\"; // '('\n const rightParenthesis = 41; charCodes[charCodes[\"rightParenthesis\"] = rightParenthesis] = \"rightParenthesis\"; // ')'\n const asterisk = 42; charCodes[charCodes[\"asterisk\"] = asterisk] = \"asterisk\"; // '*'\n const plusSign = 43; charCodes[charCodes[\"plusSign\"] = plusSign] = \"plusSign\"; // '+'\n const comma = 44; charCodes[charCodes[\"comma\"] = comma] = \"comma\"; // ','\n const dash = 45; charCodes[charCodes[\"dash\"] = dash] = \"dash\"; // '-'\n const dot = 46; charCodes[charCodes[\"dot\"] = dot] = \"dot\"; // '.'\n const slash = 47; charCodes[charCodes[\"slash\"] = slash] = \"slash\"; // '/'\n const digit0 = 48; charCodes[charCodes[\"digit0\"] = digit0] = \"digit0\"; // '0'\n const digit1 = 49; charCodes[charCodes[\"digit1\"] = digit1] = \"digit1\"; // '1'\n const digit2 = 50; charCodes[charCodes[\"digit2\"] = digit2] = \"digit2\"; // '2'\n const digit3 = 51; charCodes[charCodes[\"digit3\"] = digit3] = \"digit3\"; // '3'\n const digit4 = 52; charCodes[charCodes[\"digit4\"] = digit4] = \"digit4\"; // '4'\n const digit5 = 53; charCodes[charCodes[\"digit5\"] = digit5] = \"digit5\"; // '5'\n const digit6 = 54; charCodes[charCodes[\"digit6\"] = digit6] = \"digit6\"; // '6'\n const digit7 = 55; charCodes[charCodes[\"digit7\"] = digit7] = \"digit7\"; // '7'\n const digit8 = 56; charCodes[charCodes[\"digit8\"] = digit8] = \"digit8\"; // '8'\n const digit9 = 57; charCodes[charCodes[\"digit9\"] = digit9] = \"digit9\"; // '9'\n const colon = 58; charCodes[charCodes[\"colon\"] = colon] = \"colon\"; // ':'\n const semicolon = 59; charCodes[charCodes[\"semicolon\"] = semicolon] = \"semicolon\"; // ';'\n const lessThan = 60; charCodes[charCodes[\"lessThan\"] = lessThan] = \"lessThan\"; // '<'\n const equalsTo = 61; charCodes[charCodes[\"equalsTo\"] = equalsTo] = \"equalsTo\"; // '='\n const greaterThan = 62; charCodes[charCodes[\"greaterThan\"] = greaterThan] = \"greaterThan\"; // '>'\n const questionMark = 63; charCodes[charCodes[\"questionMark\"] = questionMark] = \"questionMark\"; // '?'\n const atSign = 64; charCodes[charCodes[\"atSign\"] = atSign] = \"atSign\"; // '@'\n const uppercaseA = 65; charCodes[charCodes[\"uppercaseA\"] = uppercaseA] = \"uppercaseA\"; // 'A'\n const uppercaseB = 66; charCodes[charCodes[\"uppercaseB\"] = uppercaseB] = \"uppercaseB\"; // 'B'\n const uppercaseC = 67; charCodes[charCodes[\"uppercaseC\"] = uppercaseC] = \"uppercaseC\"; // 'C'\n const uppercaseD = 68; charCodes[charCodes[\"uppercaseD\"] = uppercaseD] = \"uppercaseD\"; // 'D'\n const uppercaseE = 69; charCodes[charCodes[\"uppercaseE\"] = uppercaseE] = \"uppercaseE\"; // 'E'\n const uppercaseF = 70; charCodes[charCodes[\"uppercaseF\"] = uppercaseF] = \"uppercaseF\"; // 'F'\n const uppercaseG = 71; charCodes[charCodes[\"uppercaseG\"] = uppercaseG] = \"uppercaseG\"; // 'G'\n const uppercaseH = 72; charCodes[charCodes[\"uppercaseH\"] = uppercaseH] = \"uppercaseH\"; // 'H'\n const uppercaseI = 73; charCodes[charCodes[\"uppercaseI\"] = uppercaseI] = \"uppercaseI\"; // 'I'\n const uppercaseJ = 74; charCodes[charCodes[\"uppercaseJ\"] = uppercaseJ] = \"uppercaseJ\"; // 'J'\n const uppercaseK = 75; charCodes[charCodes[\"uppercaseK\"] = uppercaseK] = \"uppercaseK\"; // 'K'\n const uppercaseL = 76; charCodes[charCodes[\"uppercaseL\"] = uppercaseL] = \"uppercaseL\"; // 'L'\n const uppercaseM = 77; charCodes[charCodes[\"uppercaseM\"] = uppercaseM] = \"uppercaseM\"; // 'M'\n const uppercaseN = 78; charCodes[charCodes[\"uppercaseN\"] = uppercaseN] = \"uppercaseN\"; // 'N'\n const uppercaseO = 79; charCodes[charCodes[\"uppercaseO\"] = uppercaseO] = \"uppercaseO\"; // 'O'\n const uppercaseP = 80; charCodes[charCodes[\"uppercaseP\"] = uppercaseP] = \"uppercaseP\"; // 'P'\n const uppercaseQ = 81; charCodes[charCodes[\"uppercaseQ\"] = uppercaseQ] = \"uppercaseQ\"; // 'Q'\n const uppercaseR = 82; charCodes[charCodes[\"uppercaseR\"] = uppercaseR] = \"uppercaseR\"; // 'R'\n const uppercaseS = 83; charCodes[charCodes[\"uppercaseS\"] = uppercaseS] = \"uppercaseS\"; // 'S'\n const uppercaseT = 84; charCodes[charCodes[\"uppercaseT\"] = uppercaseT] = \"uppercaseT\"; // 'T'\n const uppercaseU = 85; charCodes[charCodes[\"uppercaseU\"] = uppercaseU] = \"uppercaseU\"; // 'U'\n const uppercaseV = 86; charCodes[charCodes[\"uppercaseV\"] = uppercaseV] = \"uppercaseV\"; // 'V'\n const uppercaseW = 87; charCodes[charCodes[\"uppercaseW\"] = uppercaseW] = \"uppercaseW\"; // 'W'\n const uppercaseX = 88; charCodes[charCodes[\"uppercaseX\"] = uppercaseX] = \"uppercaseX\"; // 'X'\n const uppercaseY = 89; charCodes[charCodes[\"uppercaseY\"] = uppercaseY] = \"uppercaseY\"; // 'Y'\n const uppercaseZ = 90; charCodes[charCodes[\"uppercaseZ\"] = uppercaseZ] = \"uppercaseZ\"; // 'Z'\n const leftSquareBracket = 91; charCodes[charCodes[\"leftSquareBracket\"] = leftSquareBracket] = \"leftSquareBracket\"; // '['\n const backslash = 92; charCodes[charCodes[\"backslash\"] = backslash] = \"backslash\"; // '\\ '\n const rightSquareBracket = 93; charCodes[charCodes[\"rightSquareBracket\"] = rightSquareBracket] = \"rightSquareBracket\"; // ']'\n const caret = 94; charCodes[charCodes[\"caret\"] = caret] = \"caret\"; // '^'\n const underscore = 95; charCodes[charCodes[\"underscore\"] = underscore] = \"underscore\"; // '_'\n const graveAccent = 96; charCodes[charCodes[\"graveAccent\"] = graveAccent] = \"graveAccent\"; // '`'\n const lowercaseA = 97; charCodes[charCodes[\"lowercaseA\"] = lowercaseA] = \"lowercaseA\"; // 'a'\n const lowercaseB = 98; charCodes[charCodes[\"lowercaseB\"] = lowercaseB] = \"lowercaseB\"; // 'b'\n const lowercaseC = 99; charCodes[charCodes[\"lowercaseC\"] = lowercaseC] = \"lowercaseC\"; // 'c'\n const lowercaseD = 100; charCodes[charCodes[\"lowercaseD\"] = lowercaseD] = \"lowercaseD\"; // 'd'\n const lowercaseE = 101; charCodes[charCodes[\"lowercaseE\"] = lowercaseE] = \"lowercaseE\"; // 'e'\n const lowercaseF = 102; charCodes[charCodes[\"lowercaseF\"] = lowercaseF] = \"lowercaseF\"; // 'f'\n const lowercaseG = 103; charCodes[charCodes[\"lowercaseG\"] = lowercaseG] = \"lowercaseG\"; // 'g'\n const lowercaseH = 104; charCodes[charCodes[\"lowercaseH\"] = lowercaseH] = \"lowercaseH\"; // 'h'\n const lowercaseI = 105; charCodes[charCodes[\"lowercaseI\"] = lowercaseI] = \"lowercaseI\"; // 'i'\n const lowercaseJ = 106; charCodes[charCodes[\"lowercaseJ\"] = lowercaseJ] = \"lowercaseJ\"; // 'j'\n const lowercaseK = 107; charCodes[charCodes[\"lowercaseK\"] = lowercaseK] = \"lowercaseK\"; // 'k'\n const lowercaseL = 108; charCodes[charCodes[\"lowercaseL\"] = lowercaseL] = \"lowercaseL\"; // 'l'\n const lowercaseM = 109; charCodes[charCodes[\"lowercaseM\"] = lowercaseM] = \"lowercaseM\"; // 'm'\n const lowercaseN = 110; charCodes[charCodes[\"lowercaseN\"] = lowercaseN] = \"lowercaseN\"; // 'n'\n const lowercaseO = 111; charCodes[charCodes[\"lowercaseO\"] = lowercaseO] = \"lowercaseO\"; // 'o'\n const lowercaseP = 112; charCodes[charCodes[\"lowercaseP\"] = lowercaseP] = \"lowercaseP\"; // 'p'\n const lowercaseQ = 113; charCodes[charCodes[\"lowercaseQ\"] = lowercaseQ] = \"lowercaseQ\"; // 'q'\n const lowercaseR = 114; charCodes[charCodes[\"lowercaseR\"] = lowercaseR] = \"lowercaseR\"; // 'r'\n const lowercaseS = 115; charCodes[charCodes[\"lowercaseS\"] = lowercaseS] = \"lowercaseS\"; // 's'\n const lowercaseT = 116; charCodes[charCodes[\"lowercaseT\"] = lowercaseT] = \"lowercaseT\"; // 't'\n const lowercaseU = 117; charCodes[charCodes[\"lowercaseU\"] = lowercaseU] = \"lowercaseU\"; // 'u'\n const lowercaseV = 118; charCodes[charCodes[\"lowercaseV\"] = lowercaseV] = \"lowercaseV\"; // 'v'\n const lowercaseW = 119; charCodes[charCodes[\"lowercaseW\"] = lowercaseW] = \"lowercaseW\"; // 'w'\n const lowercaseX = 120; charCodes[charCodes[\"lowercaseX\"] = lowercaseX] = \"lowercaseX\"; // 'x'\n const lowercaseY = 121; charCodes[charCodes[\"lowercaseY\"] = lowercaseY] = \"lowercaseY\"; // 'y'\n const lowercaseZ = 122; charCodes[charCodes[\"lowercaseZ\"] = lowercaseZ] = \"lowercaseZ\"; // 'z'\n const leftCurlyBrace = 123; charCodes[charCodes[\"leftCurlyBrace\"] = leftCurlyBrace] = \"leftCurlyBrace\"; // '{'\n const verticalBar = 124; charCodes[charCodes[\"verticalBar\"] = verticalBar] = \"verticalBar\"; // '|'\n const rightCurlyBrace = 125; charCodes[charCodes[\"rightCurlyBrace\"] = rightCurlyBrace] = \"rightCurlyBrace\"; // '}'\n const tilde = 126; charCodes[charCodes[\"tilde\"] = tilde] = \"tilde\"; // '~'\n const nonBreakingSpace = 160; charCodes[charCodes[\"nonBreakingSpace\"] = nonBreakingSpace] = \"nonBreakingSpace\";\n // eslint-disable-next-line no-irregular-whitespace\n const oghamSpaceMark = 5760; charCodes[charCodes[\"oghamSpaceMark\"] = oghamSpaceMark] = \"oghamSpaceMark\"; // ' '\n const lineSeparator = 8232; charCodes[charCodes[\"lineSeparator\"] = lineSeparator] = \"lineSeparator\";\n const paragraphSeparator = 8233; charCodes[charCodes[\"paragraphSeparator\"] = paragraphSeparator] = \"paragraphSeparator\";\n})(charCodes || (charCodes = {}));\n\nexport function isDigit(code) {\n return (\n (code >= charCodes.digit0 && code <= charCodes.digit9) ||\n (code >= charCodes.lowercaseA && code <= charCodes.lowercaseF) ||\n (code >= charCodes.uppercaseA && code <= charCodes.uppercaseF)\n );\n}\n","import State from \"../tokenizer/state\";\nimport {charCodes} from \"../util/charcodes\";\n\nexport let isJSXEnabled;\nexport let isTypeScriptEnabled;\nexport let isFlowEnabled;\nexport let state;\nexport let input;\nexport let nextContextId;\n\nexport function getNextContextId() {\n return nextContextId++;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function augmentError(error) {\n if (\"pos\" in error) {\n const loc = locationForIndex(error.pos);\n error.message += ` (${loc.line}:${loc.column})`;\n error.loc = loc;\n }\n return error;\n}\n\nexport class Loc {\n \n \n constructor(line, column) {\n this.line = line;\n this.column = column;\n }\n}\n\nexport function locationForIndex(pos) {\n let line = 1;\n let column = 1;\n for (let i = 0; i < pos; i++) {\n if (input.charCodeAt(i) === charCodes.lineFeed) {\n line++;\n column = 1;\n } else {\n column++;\n }\n }\n return new Loc(line, column);\n}\n\nexport function initParser(\n inputCode,\n isJSXEnabledArg,\n isTypeScriptEnabledArg,\n isFlowEnabledArg,\n) {\n input = inputCode;\n state = new State();\n nextContextId = 1;\n isJSXEnabled = isJSXEnabledArg;\n isTypeScriptEnabled = isTypeScriptEnabledArg;\n isFlowEnabled = isFlowEnabledArg;\n}\n","import {eat, finishToken, lookaheadTypeAndKeyword, match, nextTokenStart} from \"../tokenizer/index\";\n\nimport {formatTokenType, TokenType as tt} from \"../tokenizer/types\";\nimport {charCodes} from \"../util/charcodes\";\nimport {input, state} from \"./base\";\n\n// ## Parser utilities\n\n// Tests whether parsed token is a contextual keyword.\nexport function isContextual(contextualKeyword) {\n return state.contextualKeyword === contextualKeyword;\n}\n\nexport function isLookaheadContextual(contextualKeyword) {\n const l = lookaheadTypeAndKeyword();\n return l.type === tt.name && l.contextualKeyword === contextualKeyword;\n}\n\n// Consumes contextual keyword if possible.\nexport function eatContextual(contextualKeyword) {\n return state.contextualKeyword === contextualKeyword && eat(tt.name);\n}\n\n// Asserts that following token is given contextual keyword.\nexport function expectContextual(contextualKeyword) {\n if (!eatContextual(contextualKeyword)) {\n unexpected();\n }\n}\n\n// Test whether a semicolon can be inserted at the current position.\nexport function canInsertSemicolon() {\n return match(tt.eof) || match(tt.braceR) || hasPrecedingLineBreak();\n}\n\nexport function hasPrecedingLineBreak() {\n const prevToken = state.tokens[state.tokens.length - 1];\n const lastTokEnd = prevToken ? prevToken.end : 0;\n for (let i = lastTokEnd; i < state.start; i++) {\n const code = input.charCodeAt(i);\n if (\n code === charCodes.lineFeed ||\n code === charCodes.carriageReturn ||\n code === 0x2028 ||\n code === 0x2029\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport function hasFollowingLineBreak() {\n const nextStart = nextTokenStart();\n for (let i = state.end; i < nextStart; i++) {\n const code = input.charCodeAt(i);\n if (\n code === charCodes.lineFeed ||\n code === charCodes.carriageReturn ||\n code === 0x2028 ||\n code === 0x2029\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport function isLineTerminator() {\n return eat(tt.semi) || canInsertSemicolon();\n}\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\nexport function semicolon() {\n if (!isLineTerminator()) {\n unexpected('Unexpected token, expected \";\"');\n }\n}\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error at given pos.\nexport function expect(type) {\n const matched = eat(type);\n if (!matched) {\n unexpected(`Unexpected token, expected \"${formatTokenType(type)}\"`);\n }\n}\n\n/**\n * Transition the parser to an error state. All code needs to be written to naturally unwind in this\n * state, which allows us to backtrack without exceptions and without error plumbing everywhere.\n */\nexport function unexpected(message = \"Unexpected token\", pos = state.start) {\n if (state.error) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const err = new SyntaxError(message);\n err.pos = pos;\n state.error = err;\n state.pos = input.length;\n finishToken(tt.eof);\n}\n","import {charCodes} from \"./charcodes\";\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport const WHITESPACE_CHARS = [\n 0x0009,\n 0x000b,\n 0x000c,\n charCodes.space,\n charCodes.nonBreakingSpace,\n charCodes.oghamSpaceMark,\n 0x2000, // EN QUAD\n 0x2001, // EM QUAD\n 0x2002, // EN SPACE\n 0x2003, // EM SPACE\n 0x2004, // THREE-PER-EM SPACE\n 0x2005, // FOUR-PER-EM SPACE\n 0x2006, // SIX-PER-EM SPACE\n 0x2007, // FIGURE SPACE\n 0x2008, // PUNCTUATION SPACE\n 0x2009, // THIN SPACE\n 0x200a, // HAIR SPACE\n 0x202f, // NARROW NO-BREAK SPACE\n 0x205f, // MEDIUM MATHEMATICAL SPACE\n 0x3000, // IDEOGRAPHIC SPACE\n 0xfeff, // ZERO WIDTH NO-BREAK SPACE\n];\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const IS_WHITESPACE = new Uint8Array(65536);\nfor (const char of WHITESPACE_CHARS) {\n IS_WHITESPACE[char] = 1;\n}\n","import {charCodes} from \"./charcodes\";\nimport {WHITESPACE_CHARS} from \"./whitespace\";\n\nfunction computeIsIdentifierChar(code) {\n if (code < 48) return code === 36;\n if (code < 58) return true;\n if (code < 65) return false;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n if (code < 128) return false;\n throw new Error(\"Should not be called with non-ASCII char code.\");\n}\n\nexport const IS_IDENTIFIER_CHAR = new Uint8Array(65536);\nfor (let i = 0; i < 128; i++) {\n IS_IDENTIFIER_CHAR[i] = computeIsIdentifierChar(i) ? 1 : 0;\n}\nfor (let i = 128; i < 65536; i++) {\n IS_IDENTIFIER_CHAR[i] = 1;\n}\n// Aside from whitespace and newlines, all characters outside the ASCII space are either\n// identifier characters or invalid. Since we're not performing code validation, we can just\n// treat all invalid characters as identifier characters.\nfor (const whitespaceChar of WHITESPACE_CHARS) {\n IS_IDENTIFIER_CHAR[whitespaceChar] = 0;\n}\nIS_IDENTIFIER_CHAR[0x2028] = 0;\nIS_IDENTIFIER_CHAR[0x2029] = 0;\n\nexport const IS_IDENTIFIER_START = IS_IDENTIFIER_CHAR.slice();\nfor (let numChar = charCodes.digit0; numChar <= charCodes.digit9; numChar++) {\n IS_IDENTIFIER_START[numChar] = 0;\n}\n","// Generated file, do not edit! Run \"yarn generate\" to re-generate this file.\nimport {ContextualKeyword} from \"./keywords\";\nimport {TokenType as tt} from \"./types\";\n\n// prettier-ignore\nexport const READ_WORD_TREE = new Int32Array([\n // \"\"\n -1, 27, 783, 918, 1755, 2376, 2862, 3483, -1, 3699, -1, 4617, 4752, 4833, 5130, 5508, 5940, -1, 6480, 6939, 7749, 8181, 8451, 8613, -1, 8829, -1,\n // \"a\"\n -1, -1, 54, 243, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 432, -1, -1, -1, 675, -1, -1, -1,\n // \"ab\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1,\n // \"abs\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 108, -1, -1, -1, -1, -1, -1,\n // \"abst\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 135, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"abstr\"\n -1, 162, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"abstra\"\n -1, -1, -1, 189, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"abstrac\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 216, -1, -1, -1, -1, -1, -1,\n // \"abstract\"\n ContextualKeyword._abstract << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ac\"\n -1, -1, -1, 270, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"acc\"\n -1, -1, -1, -1, -1, 297, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"acce\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 324, -1, -1, -1, -1, -1, -1, -1,\n // \"acces\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 351, -1, -1, -1, -1, -1, -1, -1,\n // \"access\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 378, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"accesso\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 405, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"accessor\"\n ContextualKeyword._accessor << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"as\"\n ContextualKeyword._as << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 459, -1, -1, -1, -1, -1, 594, -1,\n // \"ass\"\n -1, -1, -1, -1, -1, 486, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"asse\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 513, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"asser\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, -1, -1, -1,\n // \"assert\"\n ContextualKeyword._assert << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 567, -1, -1, -1, -1, -1, -1, -1,\n // \"asserts\"\n ContextualKeyword._asserts << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"asy\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 621, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"asyn\"\n -1, -1, -1, 648, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"async\"\n ContextualKeyword._async << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"aw\"\n -1, 702, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"awa\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 729, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"awai\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 756, -1, -1, -1, -1, -1, -1,\n // \"await\"\n ContextualKeyword._await << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"b\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 810, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"br\"\n -1, -1, -1, -1, -1, 837, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"bre\"\n -1, 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"brea\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 891, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"break\"\n (tt._break << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"c\"\n -1, 945, -1, -1, -1, -1, -1, -1, 1107, -1, -1, -1, 1242, -1, -1, 1350, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ca\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 972, 1026, -1, -1, -1, -1, -1, -1,\n // \"cas\"\n -1, -1, -1, -1, -1, 999, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"case\"\n (tt._case << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"cat\"\n -1, -1, -1, 1053, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"catc\"\n -1, -1, -1, -1, -1, -1, -1, -1, 1080, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"catch\"\n (tt._catch << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ch\"\n -1, -1, -1, -1, -1, 1134, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"che\"\n -1, -1, -1, 1161, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"chec\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1188, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"check\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1215, -1, -1, -1, -1, -1, -1, -1,\n // \"checks\"\n ContextualKeyword._checks << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"cl\"\n -1, 1269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"cla\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1296, -1, -1, -1, -1, -1, -1, -1,\n // \"clas\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1323, -1, -1, -1, -1, -1, -1, -1,\n // \"class\"\n (tt._class << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"co\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1377, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"con\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1404, 1620, -1, -1, -1, -1, -1, -1,\n // \"cons\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1431, -1, -1, -1, -1, -1, -1,\n // \"const\"\n (tt._const << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1458, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"constr\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1485, -1, -1, -1, -1, -1,\n // \"constru\"\n -1, -1, -1, 1512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"construc\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1539, -1, -1, -1, -1, -1, -1,\n // \"construct\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1566, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"constructo\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1593, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"constructor\"\n ContextualKeyword._constructor << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"cont\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 1647, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"conti\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1674, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"contin\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1701, -1, -1, -1, -1, -1,\n // \"continu\"\n -1, -1, -1, -1, -1, 1728, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"continue\"\n (tt._continue << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"d\"\n -1, -1, -1, -1, -1, 1782, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2349, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"de\"\n -1, -1, 1809, 1971, -1, -1, 2106, -1, -1, -1, -1, -1, 2241, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"deb\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1836, -1, -1, -1, -1, -1,\n // \"debu\"\n -1, -1, -1, -1, -1, -1, -1, 1863, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"debug\"\n -1, -1, -1, -1, -1, -1, -1, 1890, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"debugg\"\n -1, -1, -1, -1, -1, 1917, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"debugge\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1944, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"debugger\"\n (tt._debugger << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"dec\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1998, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"decl\"\n -1, 2025, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"decla\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2052, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"declar\"\n -1, -1, -1, -1, -1, 2079, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"declare\"\n ContextualKeyword._declare << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"def\"\n -1, 2133, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"defa\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2160, -1, -1, -1, -1, -1,\n // \"defau\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2187, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"defaul\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2214, -1, -1, -1, -1, -1, -1,\n // \"default\"\n (tt._default << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"del\"\n -1, -1, -1, -1, -1, 2268, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"dele\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2295, -1, -1, -1, -1, -1, -1,\n // \"delet\"\n -1, -1, -1, -1, -1, 2322, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"delete\"\n (tt._delete << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"do\"\n (tt._do << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"e\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2403, -1, 2484, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2565, -1, -1,\n // \"el\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2430, -1, -1, -1, -1, -1, -1, -1,\n // \"els\"\n -1, -1, -1, -1, -1, 2457, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"else\"\n (tt._else << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"en\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2511, -1, -1, -1, -1, -1,\n // \"enu\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2538, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"enum\"\n ContextualKeyword._enum << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ex\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2592, -1, -1, -1, 2727, -1, -1, -1, -1, -1, -1,\n // \"exp\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2619, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"expo\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2646, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"expor\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2673, -1, -1, -1, -1, -1, -1,\n // \"export\"\n (tt._export << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2700, -1, -1, -1, -1, -1, -1, -1,\n // \"exports\"\n ContextualKeyword._exports << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ext\"\n -1, -1, -1, -1, -1, 2754, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"exte\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2781, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"exten\"\n -1, -1, -1, -1, 2808, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"extend\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2835, -1, -1, -1, -1, -1, -1, -1,\n // \"extends\"\n (tt._extends << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"f\"\n -1, 2889, -1, -1, -1, -1, -1, -1, -1, 2997, -1, -1, -1, -1, -1, 3159, -1, -1, 3213, -1, -1, 3294, -1, -1, -1, -1, -1,\n // \"fa\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2916, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"fal\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2943, -1, -1, -1, -1, -1, -1, -1,\n // \"fals\"\n -1, -1, -1, -1, -1, 2970, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"false\"\n (tt._false << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"fi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3024, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"fin\"\n -1, 3051, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"fina\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3078, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"final\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3105, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"finall\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3132, -1,\n // \"finally\"\n (tt._finally << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"fo\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3186, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"for\"\n (tt._for << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"fr\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"fro\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"from\"\n ContextualKeyword._from << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"fu\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3321, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"fun\"\n -1, -1, -1, 3348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"func\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3375, -1, -1, -1, -1, -1, -1,\n // \"funct\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 3402, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"functi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3429, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"functio\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3456, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"function\"\n (tt._function << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"g\"\n -1, -1, -1, -1, -1, 3510, -1, -1, -1, -1, -1, -1, 3564, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ge\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3537, -1, -1, -1, -1, -1, -1,\n // \"get\"\n ContextualKeyword._get << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"gl\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3591, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"glo\"\n -1, -1, 3618, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"glob\"\n -1, 3645, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"globa\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"global\"\n ContextualKeyword._global << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"i\"\n -1, -1, -1, -1, -1, -1, 3726, -1, -1, -1, -1, -1, -1, 3753, 4077, -1, -1, -1, -1, 4590, -1, -1, -1, -1, -1, -1, -1,\n // \"if\"\n (tt._if << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"im\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3780, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"imp\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3807, -1, -1, 3996, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"impl\"\n -1, -1, -1, -1, -1, 3834, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"imple\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3861, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"implem\"\n -1, -1, -1, -1, -1, 3888, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"impleme\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3915, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"implemen\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3942, -1, -1, -1, -1, -1, -1,\n // \"implement\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3969, -1, -1, -1, -1, -1, -1, -1,\n // \"implements\"\n ContextualKeyword._implements << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"impo\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4023, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"impor\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4050, -1, -1, -1, -1, -1, -1,\n // \"import\"\n (tt._import << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"in\"\n (tt._in << 1) + 1, -1, -1, -1, -1, -1, 4104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4185, 4401, -1, -1, -1, -1, -1, -1,\n // \"inf\"\n -1, -1, -1, -1, -1, 4131, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"infe\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4158, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"infer\"\n ContextualKeyword._infer << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ins\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4212, -1, -1, -1, -1, -1, -1,\n // \"inst\"\n -1, 4239, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"insta\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4266, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"instan\"\n -1, -1, -1, 4293, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"instanc\"\n -1, -1, -1, -1, -1, 4320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"instance\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4347, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"instanceo\"\n -1, -1, -1, -1, -1, -1, 4374, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"instanceof\"\n (tt._instanceof << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"int\"\n -1, -1, -1, -1, -1, 4428, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"inte\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4455, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"inter\"\n -1, -1, -1, -1, -1, -1, 4482, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"interf\"\n -1, 4509, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"interfa\"\n -1, -1, -1, 4536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"interfac\"\n -1, -1, -1, -1, -1, 4563, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"interface\"\n ContextualKeyword._interface << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"is\"\n ContextualKeyword._is << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"k\"\n -1, -1, -1, -1, -1, 4644, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ke\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4671, -1,\n // \"key\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4698, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"keyo\"\n -1, -1, -1, -1, -1, -1, 4725, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"keyof\"\n ContextualKeyword._keyof << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"l\"\n -1, -1, -1, -1, -1, 4779, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"le\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4806, -1, -1, -1, -1, -1, -1,\n // \"let\"\n (tt._let << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"m\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 4860, -1, -1, -1, -1, -1, 4995, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"mi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4887, -1, -1,\n // \"mix\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 4914, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"mixi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4941, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"mixin\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4968, -1, -1, -1, -1, -1, -1, -1,\n // \"mixins\"\n ContextualKeyword._mixins << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"mo\"\n -1, -1, -1, -1, 5022, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"mod\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5049, -1, -1, -1, -1, -1,\n // \"modu\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5076, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"modul\"\n -1, -1, -1, -1, -1, 5103, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"module\"\n ContextualKeyword._module << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"n\"\n -1, 5157, -1, -1, -1, 5373, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5427, -1, -1, -1, -1, -1,\n // \"na\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5184, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"nam\"\n -1, -1, -1, -1, -1, 5211, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"name\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5238, -1, -1, -1, -1, -1, -1, -1,\n // \"names\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5265, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"namesp\"\n -1, 5292, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"namespa\"\n -1, -1, -1, 5319, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"namespac\"\n -1, -1, -1, -1, -1, 5346, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"namespace\"\n ContextualKeyword._namespace << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ne\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5400, -1, -1, -1,\n // \"new\"\n (tt._new << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"nu\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5454, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"nul\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5481, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"null\"\n (tt._null << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"o\"\n -1, -1, -1, -1, -1, -1, 5535, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5562, -1, -1, -1, -1, 5697, 5751, -1, -1, -1, -1,\n // \"of\"\n ContextualKeyword._of << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"op\"\n -1, 5589, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"opa\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5616, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"opaq\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5643, -1, -1, -1, -1, -1,\n // \"opaqu\"\n -1, -1, -1, -1, -1, 5670, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"opaque\"\n ContextualKeyword._opaque << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ou\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5724, -1, -1, -1, -1, -1, -1,\n // \"out\"\n ContextualKeyword._out << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ov\"\n -1, -1, -1, -1, -1, 5778, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ove\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5805, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"over\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5832, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"overr\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 5859, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"overri\"\n -1, -1, -1, -1, 5886, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"overrid\"\n -1, -1, -1, -1, -1, 5913, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"override\"\n ContextualKeyword._override << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"p\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5967, -1, -1, 6345, -1, -1, -1, -1, -1,\n // \"pr\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 5994, -1, -1, -1, -1, -1, 6129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"pri\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6021, -1, -1, -1, -1,\n // \"priv\"\n -1, 6048, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"priva\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6075, -1, -1, -1, -1, -1, -1,\n // \"privat\"\n -1, -1, -1, -1, -1, 6102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"private\"\n ContextualKeyword._private << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"pro\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6156, -1, -1, -1, -1, -1, -1,\n // \"prot\"\n -1, -1, -1, -1, -1, 6183, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6318, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"prote\"\n -1, -1, -1, 6210, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"protec\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6237, -1, -1, -1, -1, -1, -1,\n // \"protect\"\n -1, -1, -1, -1, -1, 6264, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"protecte\"\n -1, -1, -1, -1, 6291, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"protected\"\n ContextualKeyword._protected << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"proto\"\n ContextualKeyword._proto << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"pu\"\n -1, -1, 6372, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"pub\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6399, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"publ\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 6426, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"publi\"\n -1, -1, -1, 6453, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"public\"\n ContextualKeyword._public << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"r\"\n -1, -1, -1, -1, -1, 6507, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"re\"\n -1, 6534, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6696, -1, -1, 6831, -1, -1, -1, -1, -1, -1,\n // \"rea\"\n -1, -1, -1, -1, 6561, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"read\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6588, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"reado\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6615, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"readon\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6642, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"readonl\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6669, -1,\n // \"readonly\"\n ContextualKeyword._readonly << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"req\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6723, -1, -1, -1, -1, -1,\n // \"requ\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 6750, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"requi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6777, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"requir\"\n -1, -1, -1, -1, -1, 6804, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"require\"\n ContextualKeyword._require << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ret\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6858, -1, -1, -1, -1, -1,\n // \"retu\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6885, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"retur\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6912, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"return\"\n (tt._return << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"s\"\n -1, 6966, -1, -1, -1, 7182, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7236, 7371, -1, 7479, -1, 7614, -1,\n // \"sa\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6993, -1, -1, -1, -1, -1, -1,\n // \"sat\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 7020, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"sati\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7047, -1, -1, -1, -1, -1, -1, -1,\n // \"satis\"\n -1, -1, -1, -1, -1, -1, 7074, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"satisf\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 7101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"satisfi\"\n -1, -1, -1, -1, -1, 7128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"satisfie\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7155, -1, -1, -1, -1, -1, -1, -1,\n // \"satisfies\"\n ContextualKeyword._satisfies << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"se\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7209, -1, -1, -1, -1, -1, -1,\n // \"set\"\n ContextualKeyword._set << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"st\"\n -1, 7263, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"sta\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7290, -1, -1, -1, -1, -1, -1,\n // \"stat\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 7317, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"stati\"\n -1, -1, -1, 7344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"static\"\n ContextualKeyword._static << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"su\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"sup\"\n -1, -1, -1, -1, -1, 7425, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"supe\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7452, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"super\"\n (tt._super << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"sw\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 7506, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"swi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7533, -1, -1, -1, -1, -1, -1,\n // \"swit\"\n -1, -1, -1, 7560, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"switc\"\n -1, -1, -1, -1, -1, -1, -1, -1, 7587, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"switch\"\n (tt._switch << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"sy\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7641, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"sym\"\n -1, -1, 7668, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"symb\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7695, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"symbo\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7722, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"symbol\"\n ContextualKeyword._symbol << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"t\"\n -1, -1, -1, -1, -1, -1, -1, -1, 7776, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7938, -1, -1, -1, -1, -1, -1, 8046, -1,\n // \"th\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 7803, -1, -1, -1, -1, -1, -1, -1, -1, 7857, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"thi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7830, -1, -1, -1, -1, -1, -1, -1,\n // \"this\"\n (tt._this << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"thr\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7884, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"thro\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7911, -1, -1, -1,\n // \"throw\"\n (tt._throw << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"tr\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7965, -1, -1, -1, 8019, -1,\n // \"tru\"\n -1, -1, -1, -1, -1, 7992, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"true\"\n (tt._true << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"try\"\n (tt._try << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"ty\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8073, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"typ\"\n -1, -1, -1, -1, -1, 8100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"type\"\n ContextualKeyword._type << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8127, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"typeo\"\n -1, -1, -1, -1, -1, -1, 8154, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"typeof\"\n (tt._typeof << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"u\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8208, -1, -1, -1, -1, 8343, -1, -1, -1, -1, -1, -1, -1,\n // \"un\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 8235, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"uni\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8262, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"uniq\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8289, -1, -1, -1, -1, -1,\n // \"uniqu\"\n -1, -1, -1, -1, -1, 8316, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"unique\"\n ContextualKeyword._unique << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"us\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 8370, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"usi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"usin\"\n -1, -1, -1, -1, -1, -1, -1, 8424, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"using\"\n ContextualKeyword._using << 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"v\"\n -1, 8478, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8532, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"va\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8505, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"var\"\n (tt._var << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"vo\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 8559, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"voi\"\n -1, -1, -1, -1, 8586, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"void\"\n (tt._void << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"w\"\n -1, -1, -1, -1, -1, -1, -1, -1, 8640, 8748, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"wh\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 8667, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"whi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8694, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"whil\"\n -1, -1, -1, -1, -1, 8721, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"while\"\n (tt._while << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"wi\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8775, -1, -1, -1, -1, -1, -1,\n // \"wit\"\n -1, -1, -1, -1, -1, -1, -1, -1, 8802, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"with\"\n (tt._with << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"y\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, 8856, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"yi\"\n -1, -1, -1, -1, -1, 8883, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"yie\"\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8910, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"yiel\"\n -1, -1, -1, -1, 8937, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n // \"yield\"\n (tt._yield << 1) + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n]);\n","import {input, state} from \"../traverser/base\";\nimport {charCodes} from \"../util/charcodes\";\nimport {IS_IDENTIFIER_CHAR} from \"../util/identifier\";\nimport {finishToken} from \"./index\";\nimport {READ_WORD_TREE} from \"./readWordTree\";\nimport {TokenType as tt} from \"./types\";\n\n/**\n * Read an identifier, producing either a name token or matching on one of the existing keywords.\n * For performance, we pre-generate big decision tree that we traverse. Each node represents a\n * prefix and has 27 values, where the first value is the token or contextual token, if any (-1 if\n * not), and the other 26 values are the transitions to other nodes, or -1 to stop.\n */\nexport default function readWord() {\n let treePos = 0;\n let code = 0;\n let pos = state.pos;\n while (pos < input.length) {\n code = input.charCodeAt(pos);\n if (code < charCodes.lowercaseA || code > charCodes.lowercaseZ) {\n break;\n }\n const next = READ_WORD_TREE[treePos + (code - charCodes.lowercaseA) + 1];\n if (next === -1) {\n break;\n } else {\n treePos = next;\n pos++;\n }\n }\n\n const keywordValue = READ_WORD_TREE[treePos];\n if (keywordValue > -1 && !IS_IDENTIFIER_CHAR[code]) {\n state.pos = pos;\n if (keywordValue & 1) {\n finishToken(keywordValue >>> 1);\n } else {\n finishToken(tt.name, keywordValue >>> 1);\n }\n return;\n }\n\n while (pos < input.length) {\n const ch = input.charCodeAt(pos);\n if (IS_IDENTIFIER_CHAR[ch]) {\n pos++;\n } else if (ch === charCodes.backslash) {\n // \\u\n pos += 2;\n if (input.charCodeAt(pos) === charCodes.leftCurlyBrace) {\n while (pos < input.length && input.charCodeAt(pos) !== charCodes.rightCurlyBrace) {\n pos++;\n }\n pos++;\n }\n } else if (ch === charCodes.atSign && input.charCodeAt(pos + 1) === charCodes.atSign) {\n pos += 2;\n } else {\n break;\n }\n }\n state.pos = pos;\n finishToken(tt.name);\n}\n","/* eslint max-len: 0 */\n\nimport {input, isFlowEnabled, state} from \"../traverser/base\";\nimport {unexpected} from \"../traverser/util\";\nimport {charCodes} from \"../util/charcodes\";\nimport {IS_IDENTIFIER_CHAR, IS_IDENTIFIER_START} from \"../util/identifier\";\nimport {IS_WHITESPACE, skipWhiteSpace} from \"../util/whitespace\";\nimport {ContextualKeyword} from \"./keywords\";\nimport readWord from \"./readWord\";\nimport { TokenType as tt} from \"./types\";\n\nexport var IdentifierRole; (function (IdentifierRole) {\n const Access = 0; IdentifierRole[IdentifierRole[\"Access\"] = Access] = \"Access\";\n const ExportAccess = Access + 1; IdentifierRole[IdentifierRole[\"ExportAccess\"] = ExportAccess] = \"ExportAccess\";\n const TopLevelDeclaration = ExportAccess + 1; IdentifierRole[IdentifierRole[\"TopLevelDeclaration\"] = TopLevelDeclaration] = \"TopLevelDeclaration\";\n const FunctionScopedDeclaration = TopLevelDeclaration + 1; IdentifierRole[IdentifierRole[\"FunctionScopedDeclaration\"] = FunctionScopedDeclaration] = \"FunctionScopedDeclaration\";\n const BlockScopedDeclaration = FunctionScopedDeclaration + 1; IdentifierRole[IdentifierRole[\"BlockScopedDeclaration\"] = BlockScopedDeclaration] = \"BlockScopedDeclaration\";\n const ObjectShorthandTopLevelDeclaration = BlockScopedDeclaration + 1; IdentifierRole[IdentifierRole[\"ObjectShorthandTopLevelDeclaration\"] = ObjectShorthandTopLevelDeclaration] = \"ObjectShorthandTopLevelDeclaration\";\n const ObjectShorthandFunctionScopedDeclaration = ObjectShorthandTopLevelDeclaration + 1; IdentifierRole[IdentifierRole[\"ObjectShorthandFunctionScopedDeclaration\"] = ObjectShorthandFunctionScopedDeclaration] = \"ObjectShorthandFunctionScopedDeclaration\";\n const ObjectShorthandBlockScopedDeclaration = ObjectShorthandFunctionScopedDeclaration + 1; IdentifierRole[IdentifierRole[\"ObjectShorthandBlockScopedDeclaration\"] = ObjectShorthandBlockScopedDeclaration] = \"ObjectShorthandBlockScopedDeclaration\";\n const ObjectShorthand = ObjectShorthandBlockScopedDeclaration + 1; IdentifierRole[IdentifierRole[\"ObjectShorthand\"] = ObjectShorthand] = \"ObjectShorthand\";\n // Any identifier bound in an import statement, e.g. both A and b from\n // `import A, * as b from 'A';`\n const ImportDeclaration = ObjectShorthand + 1; IdentifierRole[IdentifierRole[\"ImportDeclaration\"] = ImportDeclaration] = \"ImportDeclaration\";\n const ObjectKey = ImportDeclaration + 1; IdentifierRole[IdentifierRole[\"ObjectKey\"] = ObjectKey] = \"ObjectKey\";\n // The `foo` in `import {foo as bar} from \"./abc\";`.\n const ImportAccess = ObjectKey + 1; IdentifierRole[IdentifierRole[\"ImportAccess\"] = ImportAccess] = \"ImportAccess\";\n})(IdentifierRole || (IdentifierRole = {}));\n\n/**\n * Extra information on jsxTagStart tokens, used to determine which of the three\n * jsx functions are called in the automatic transform.\n */\nexport var JSXRole; (function (JSXRole) {\n // The element is self-closing or has a body that resolves to empty. We\n // shouldn't emit children at all in this case.\n const NoChildren = 0; JSXRole[JSXRole[\"NoChildren\"] = NoChildren] = \"NoChildren\";\n // The element has a single explicit child, which might still be an arbitrary\n // expression like an array. We should emit that expression as the children.\n const OneChild = NoChildren + 1; JSXRole[JSXRole[\"OneChild\"] = OneChild] = \"OneChild\";\n // The element has at least two explicitly-specified children or has spread\n // children, so child positions are assumed to be \"static\". We should wrap\n // these children in an array.\n const StaticChildren = OneChild + 1; JSXRole[JSXRole[\"StaticChildren\"] = StaticChildren] = \"StaticChildren\";\n // The element has a prop named \"key\" after a prop spread, so we should fall\n // back to the createElement function.\n const KeyAfterPropSpread = StaticChildren + 1; JSXRole[JSXRole[\"KeyAfterPropSpread\"] = KeyAfterPropSpread] = \"KeyAfterPropSpread\";\n})(JSXRole || (JSXRole = {}));\n\nexport function isDeclaration(token) {\n const role = token.identifierRole;\n return (\n role === IdentifierRole.TopLevelDeclaration ||\n role === IdentifierRole.FunctionScopedDeclaration ||\n role === IdentifierRole.BlockScopedDeclaration ||\n role === IdentifierRole.ObjectShorthandTopLevelDeclaration ||\n role === IdentifierRole.ObjectShorthandFunctionScopedDeclaration ||\n role === IdentifierRole.ObjectShorthandBlockScopedDeclaration\n );\n}\n\nexport function isNonTopLevelDeclaration(token) {\n const role = token.identifierRole;\n return (\n role === IdentifierRole.FunctionScopedDeclaration ||\n role === IdentifierRole.BlockScopedDeclaration ||\n role === IdentifierRole.ObjectShorthandFunctionScopedDeclaration ||\n role === IdentifierRole.ObjectShorthandBlockScopedDeclaration\n );\n}\n\nexport function isTopLevelDeclaration(token) {\n const role = token.identifierRole;\n return (\n role === IdentifierRole.TopLevelDeclaration ||\n role === IdentifierRole.ObjectShorthandTopLevelDeclaration ||\n role === IdentifierRole.ImportDeclaration\n );\n}\n\nexport function isBlockScopedDeclaration(token) {\n const role = token.identifierRole;\n // Treat top-level declarations as block scope since the distinction doesn't matter here.\n return (\n role === IdentifierRole.TopLevelDeclaration ||\n role === IdentifierRole.BlockScopedDeclaration ||\n role === IdentifierRole.ObjectShorthandTopLevelDeclaration ||\n role === IdentifierRole.ObjectShorthandBlockScopedDeclaration\n );\n}\n\nexport function isFunctionScopedDeclaration(token) {\n const role = token.identifierRole;\n return (\n role === IdentifierRole.FunctionScopedDeclaration ||\n role === IdentifierRole.ObjectShorthandFunctionScopedDeclaration\n );\n}\n\nexport function isObjectShorthandDeclaration(token) {\n return (\n token.identifierRole === IdentifierRole.ObjectShorthandTopLevelDeclaration ||\n token.identifierRole === IdentifierRole.ObjectShorthandBlockScopedDeclaration ||\n token.identifierRole === IdentifierRole.ObjectShorthandFunctionScopedDeclaration\n );\n}\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\nexport class Token {\n constructor() {\n this.type = state.type;\n this.contextualKeyword = state.contextualKeyword;\n this.start = state.start;\n this.end = state.end;\n this.scopeDepth = state.scopeDepth;\n this.isType = state.isType;\n this.identifierRole = null;\n this.jsxRole = null;\n this.shadowsGlobal = false;\n this.isAsyncOperation = false;\n this.contextId = null;\n this.rhsEndIndex = null;\n this.isExpression = false;\n this.numNullishCoalesceStarts = 0;\n this.numNullishCoalesceEnds = 0;\n this.isOptionalChainStart = false;\n this.isOptionalChainEnd = false;\n this.subscriptStartIndex = null;\n this.nullishStartIndex = null;\n }\n\n \n \n \n \n \n \n \n \n // Initially false for all tokens, then may be computed in a follow-up step that does scope\n // analysis.\n \n // Initially false for all tokens, but may be set during transform to mark it as containing an\n // await operation.\n \n \n // For assignments, the index of the RHS. For export tokens, the end of the export.\n \n // For class tokens, records if the class is a class expression or a class statement.\n \n // Number of times to insert a `nullishCoalesce(` snippet before this token.\n \n // Number of times to insert a `)` snippet after this token.\n \n // If true, insert an `optionalChain([` snippet before this token.\n \n // If true, insert a `])` snippet after this token.\n \n // Tag for `.`, `?.`, `[`, `?.[`, `(`, and `?.(` to denote the \"root\" token for this\n // subscript chain. This can be used to determine if this chain is an optional chain.\n \n // Tag for `??` operators to denote the root token for this nullish coalescing call.\n \n}\n\n// ## Tokenizer\n\n// Move to the next token\nexport function next() {\n state.tokens.push(new Token());\n nextToken();\n}\n\n// Call instead of next when inside a template, since that needs to be handled differently.\nexport function nextTemplateToken() {\n state.tokens.push(new Token());\n state.start = state.pos;\n readTmplToken();\n}\n\n// The tokenizer never parses regexes by default. Instead, the parser is responsible for\n// instructing it to parse a regex when we see a slash at the start of an expression.\nexport function retokenizeSlashAsRegex() {\n if (state.type === tt.assign) {\n --state.pos;\n }\n readRegexp();\n}\n\nexport function pushTypeContext(existingTokensInType) {\n for (let i = state.tokens.length - existingTokensInType; i < state.tokens.length; i++) {\n state.tokens[i].isType = true;\n }\n const oldIsType = state.isType;\n state.isType = true;\n return oldIsType;\n}\n\nexport function popTypeContext(oldIsType) {\n state.isType = oldIsType;\n}\n\nexport function eat(type) {\n if (match(type)) {\n next();\n return true;\n } else {\n return false;\n }\n}\n\nexport function eatTypeToken(tokenType) {\n const oldIsType = state.isType;\n state.isType = true;\n eat(tokenType);\n state.isType = oldIsType;\n}\n\nexport function match(type) {\n return state.type === type;\n}\n\nexport function lookaheadType() {\n const snapshot = state.snapshot();\n next();\n const type = state.type;\n state.restoreFromSnapshot(snapshot);\n return type;\n}\n\nexport class TypeAndKeyword {\n \n \n constructor(type, contextualKeyword) {\n this.type = type;\n this.contextualKeyword = contextualKeyword;\n }\n}\n\nexport function lookaheadTypeAndKeyword() {\n const snapshot = state.snapshot();\n next();\n const type = state.type;\n const contextualKeyword = state.contextualKeyword;\n state.restoreFromSnapshot(snapshot);\n return new TypeAndKeyword(type, contextualKeyword);\n}\n\nexport function nextTokenStart() {\n return nextTokenStartSince(state.pos);\n}\n\nexport function nextTokenStartSince(pos) {\n skipWhiteSpace.lastIndex = pos;\n const skip = skipWhiteSpace.exec(input);\n return pos + skip[0].length;\n}\n\nexport function lookaheadCharCode() {\n return input.charCodeAt(nextTokenStart());\n}\n\n// Read a single token, updating the parser object's token-related\n// properties.\nexport function nextToken() {\n skipSpace();\n state.start = state.pos;\n if (state.pos >= input.length) {\n const tokens = state.tokens;\n // We normally run past the end a bit, but if we're way past the end, avoid an infinite loop.\n // Also check the token positions rather than the types since sometimes we rewrite the token\n // type to something else.\n if (\n tokens.length >= 2 &&\n tokens[tokens.length - 1].start >= input.length &&\n tokens[tokens.length - 2].start >= input.length\n ) {\n unexpected(\"Unexpectedly reached the end of input.\");\n }\n finishToken(tt.eof);\n return;\n }\n readToken(input.charCodeAt(state.pos));\n}\n\nfunction readToken(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (\n IS_IDENTIFIER_START[code] ||\n code === charCodes.backslash ||\n (code === charCodes.atSign && input.charCodeAt(state.pos + 1) === charCodes.atSign)\n ) {\n readWord();\n } else {\n getTokenFromCode(code);\n }\n}\n\nfunction skipBlockComment() {\n while (\n input.charCodeAt(state.pos) !== charCodes.asterisk ||\n input.charCodeAt(state.pos + 1) !== charCodes.slash\n ) {\n state.pos++;\n if (state.pos > input.length) {\n unexpected(\"Unterminated comment\", state.pos - 2);\n return;\n }\n }\n state.pos += 2;\n}\n\nexport function skipLineComment(startSkip) {\n let ch = input.charCodeAt((state.pos += startSkip));\n if (state.pos < input.length) {\n while (\n ch !== charCodes.lineFeed &&\n ch !== charCodes.carriageReturn &&\n ch !== charCodes.lineSeparator &&\n ch !== charCodes.paragraphSeparator &&\n ++state.pos < input.length\n ) {\n ch = input.charCodeAt(state.pos);\n }\n }\n}\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments.\nexport function skipSpace() {\n while (state.pos < input.length) {\n const ch = input.charCodeAt(state.pos);\n switch (ch) {\n case charCodes.carriageReturn:\n if (input.charCodeAt(state.pos + 1) === charCodes.lineFeed) {\n ++state.pos;\n }\n\n case charCodes.lineFeed:\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n ++state.pos;\n break;\n\n case charCodes.slash:\n switch (input.charCodeAt(state.pos + 1)) {\n case charCodes.asterisk:\n state.pos += 2;\n skipBlockComment();\n break;\n\n case charCodes.slash:\n skipLineComment(2);\n break;\n\n default:\n return;\n }\n break;\n\n default:\n if (IS_WHITESPACE[ch]) {\n ++state.pos;\n } else {\n return;\n }\n }\n }\n}\n\n// Called at the end of every token. Sets various fields, and skips the space after the token, so\n// that the next one's `start` will point at the right position.\nexport function finishToken(\n type,\n contextualKeyword = ContextualKeyword.NONE,\n) {\n state.end = state.pos;\n state.type = type;\n state.contextualKeyword = contextualKeyword;\n}\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\nfunction readToken_dot() {\n const nextChar = input.charCodeAt(state.pos + 1);\n if (nextChar >= charCodes.digit0 && nextChar <= charCodes.digit9) {\n readNumber(true);\n return;\n }\n\n if (nextChar === charCodes.dot && input.charCodeAt(state.pos + 2) === charCodes.dot) {\n state.pos += 3;\n finishToken(tt.ellipsis);\n } else {\n ++state.pos;\n finishToken(tt.dot);\n }\n}\n\nfunction readToken_slash() {\n const nextChar = input.charCodeAt(state.pos + 1);\n if (nextChar === charCodes.equalsTo) {\n finishOp(tt.assign, 2);\n } else {\n finishOp(tt.slash, 1);\n }\n}\n\nfunction readToken_mult_modulo(code) {\n // '%*'\n let tokenType = code === charCodes.asterisk ? tt.star : tt.modulo;\n let width = 1;\n let nextChar = input.charCodeAt(state.pos + 1);\n\n // Exponentiation operator **\n if (code === charCodes.asterisk && nextChar === charCodes.asterisk) {\n width++;\n nextChar = input.charCodeAt(state.pos + 2);\n tokenType = tt.exponent;\n }\n\n // Match *= or %=, disallowing *=> which can be valid in flow.\n if (\n nextChar === charCodes.equalsTo &&\n input.charCodeAt(state.pos + 2) !== charCodes.greaterThan\n ) {\n width++;\n tokenType = tt.assign;\n }\n\n finishOp(tokenType, width);\n}\n\nfunction readToken_pipe_amp(code) {\n // '|&'\n const nextChar = input.charCodeAt(state.pos + 1);\n\n if (nextChar === code) {\n if (input.charCodeAt(state.pos + 2) === charCodes.equalsTo) {\n // ||= or &&=\n finishOp(tt.assign, 3);\n } else {\n // || or &&\n finishOp(code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND, 2);\n }\n return;\n }\n\n if (code === charCodes.verticalBar) {\n // '|>'\n if (nextChar === charCodes.greaterThan) {\n finishOp(tt.pipeline, 2);\n return;\n } else if (nextChar === charCodes.rightCurlyBrace && isFlowEnabled) {\n // '|}'\n finishOp(tt.braceBarR, 2);\n return;\n }\n }\n\n if (nextChar === charCodes.equalsTo) {\n finishOp(tt.assign, 2);\n return;\n }\n\n finishOp(code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND, 1);\n}\n\nfunction readToken_caret() {\n // '^'\n const nextChar = input.charCodeAt(state.pos + 1);\n if (nextChar === charCodes.equalsTo) {\n finishOp(tt.assign, 2);\n } else {\n finishOp(tt.bitwiseXOR, 1);\n }\n}\n\nfunction readToken_plus_min(code) {\n // '+-'\n const nextChar = input.charCodeAt(state.pos + 1);\n\n if (nextChar === code) {\n // Tentatively call this a prefix operator, but it might be changed to postfix later.\n finishOp(tt.preIncDec, 2);\n return;\n }\n\n if (nextChar === charCodes.equalsTo) {\n finishOp(tt.assign, 2);\n } else if (code === charCodes.plusSign) {\n finishOp(tt.plus, 1);\n } else {\n finishOp(tt.minus, 1);\n }\n}\n\nfunction readToken_lt() {\n const nextChar = input.charCodeAt(state.pos + 1);\n\n if (nextChar === charCodes.lessThan) {\n if (input.charCodeAt(state.pos + 2) === charCodes.equalsTo) {\n finishOp(tt.assign, 3);\n return;\n }\n // We see <<, but need to be really careful about whether to treat it as a\n // true left-shift or as two < tokens.\n if (state.isType) {\n // Within a type, << might come up in a snippet like `Array<<T>() => void>`,\n // so treat it as two < tokens. Importantly, this should only override <<\n // rather than other tokens like <= . If we treated <= as < in a type\n // context, then the snippet `a as T <= 1` would incorrectly start parsing\n // a type argument on T. We don't need to worry about `a as T << 1`\n // because TypeScript disallows that syntax.\n finishOp(tt.lessThan, 1);\n } else {\n // Outside a type, this might be a true left-shift operator, or it might\n // still be two open-type-arg tokens, such as in `f<<T>() => void>()`. We\n // look at the token while considering the `f`, so we don't yet know that\n // we're in a type context. In this case, we initially tokenize as a\n // left-shift and correct after-the-fact as necessary in\n // tsParseTypeArgumentsWithPossibleBitshift .\n finishOp(tt.bitShiftL, 2);\n }\n return;\n }\n\n if (nextChar === charCodes.equalsTo) {\n // <=\n finishOp(tt.relationalOrEqual, 2);\n } else {\n finishOp(tt.lessThan, 1);\n }\n}\n\nfunction readToken_gt() {\n if (state.isType) {\n // Avoid right-shift for things like `Array<Array<string>>` and\n // greater-than-or-equal for things like `const a: Array<number>=[];`.\n finishOp(tt.greaterThan, 1);\n return;\n }\n\n const nextChar = input.charCodeAt(state.pos + 1);\n\n if (nextChar === charCodes.greaterThan) {\n const size = input.charCodeAt(state.pos + 2) === charCodes.greaterThan ? 3 : 2;\n if (input.charCodeAt(state.pos + size) === charCodes.equalsTo) {\n finishOp(tt.assign, size + 1);\n return;\n }\n finishOp(tt.bitShiftR, size);\n return;\n }\n\n if (nextChar === charCodes.equalsTo) {\n // >=\n finishOp(tt.relationalOrEqual, 2);\n } else {\n finishOp(tt.greaterThan, 1);\n }\n}\n\n/**\n * Reinterpret a possible > token when transitioning from a type to a non-type\n * context.\n *\n * This comes up in two situations where >= needs to be treated as one token:\n * - After an `as` expression, like in the code `a as T >= 1`.\n * - In a type argument in an expression context, e.g. `f(a < b, c >= d)`, we\n * need to see the token as >= so that we get an error and backtrack to\n * normal expression parsing.\n *\n * Other situations require >= to be seen as two tokens, e.g.\n * `const x: Array<T>=[];`, so it's important to treat > as its own token in\n * typical type parsing situations.\n */\nexport function rescan_gt() {\n if (state.type === tt.greaterThan) {\n state.pos -= 1;\n readToken_gt();\n }\n}\n\nfunction readToken_eq_excl(code) {\n // '=!'\n const nextChar = input.charCodeAt(state.pos + 1);\n if (nextChar === charCodes.equalsTo) {\n finishOp(tt.equality, input.charCodeAt(state.pos + 2) === charCodes.equalsTo ? 3 : 2);\n return;\n }\n if (code === charCodes.equalsTo && nextChar === charCodes.greaterThan) {\n // '=>'\n state.pos += 2;\n finishToken(tt.arrow);\n return;\n }\n finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n}\n\nfunction readToken_question() {\n // '?'\n const nextChar = input.charCodeAt(state.pos + 1);\n const nextChar2 = input.charCodeAt(state.pos + 2);\n if (\n nextChar === charCodes.questionMark &&\n // In Flow (but not TypeScript), ??string is a valid type that should be\n // tokenized as two individual ? tokens.\n !(isFlowEnabled && state.isType)\n ) {\n if (nextChar2 === charCodes.equalsTo) {\n // '??='\n finishOp(tt.assign, 3);\n } else {\n // '??'\n finishOp(tt.nullishCoalescing, 2);\n }\n } else if (\n nextChar === charCodes.dot &&\n !(nextChar2 >= charCodes.digit0 && nextChar2 <= charCodes.digit9)\n ) {\n // '.' not followed by a number\n state.pos += 2;\n finishToken(tt.questionDot);\n } else {\n ++state.pos;\n finishToken(tt.question);\n }\n}\n\nexport function getTokenFromCode(code) {\n switch (code) {\n case charCodes.numberSign:\n ++state.pos;\n finishToken(tt.hash);\n return;\n\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n\n case charCodes.dot:\n readToken_dot();\n return;\n\n // Punctuation tokens.\n case charCodes.leftParenthesis:\n ++state.pos;\n finishToken(tt.parenL);\n return;\n case charCodes.rightParenthesis:\n ++state.pos;\n finishToken(tt.parenR);\n return;\n case charCodes.semicolon:\n ++state.pos;\n finishToken(tt.semi);\n return;\n case charCodes.comma:\n ++state.pos;\n finishToken(tt.comma);\n return;\n case charCodes.leftSquareBracket:\n ++state.pos;\n finishToken(tt.bracketL);\n return;\n case charCodes.rightSquareBracket:\n ++state.pos;\n finishToken(tt.bracketR);\n return;\n\n case charCodes.leftCurlyBrace:\n if (isFlowEnabled && input.charCodeAt(state.pos + 1) === charCodes.verticalBar) {\n finishOp(tt.braceBarL, 2);\n } else {\n ++state.pos;\n finishToken(tt.braceL);\n }\n return;\n\n case charCodes.rightCurlyBrace:\n ++state.pos;\n finishToken(tt.braceR);\n return;\n\n case charCodes.colon:\n if (input.charCodeAt(state.pos + 1) === charCodes.colon) {\n finishOp(tt.doubleColon, 2);\n } else {\n ++state.pos;\n finishToken(tt.colon);\n }\n return;\n\n case charCodes.questionMark:\n readToken_question();\n return;\n case charCodes.atSign:\n ++state.pos;\n finishToken(tt.at);\n return;\n\n case charCodes.graveAccent:\n ++state.pos;\n finishToken(tt.backQuote);\n return;\n\n case charCodes.digit0: {\n const nextChar = input.charCodeAt(state.pos + 1);\n // '0x', '0X', '0o', '0O', '0b', '0B'\n if (\n nextChar === charCodes.lowercaseX ||\n nextChar === charCodes.uppercaseX ||\n nextChar === charCodes.lowercaseO ||\n nextChar === charCodes.uppercaseO ||\n nextChar === charCodes.lowercaseB ||\n nextChar === charCodes.uppercaseB\n ) {\n readRadixNumber();\n return;\n }\n }\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case charCodes.digit1:\n case charCodes.digit2:\n case charCodes.digit3:\n case charCodes.digit4:\n case charCodes.digit5:\n case charCodes.digit6:\n case charCodes.digit7:\n case charCodes.digit8:\n case charCodes.digit9:\n readNumber(false);\n return;\n\n // Quotes produce strings.\n case charCodes.quotationMark:\n case charCodes.apostrophe:\n readString(code);\n return;\n\n // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n\n case charCodes.slash:\n readToken_slash();\n return;\n\n case charCodes.percentSign:\n case charCodes.asterisk:\n readToken_mult_modulo(code);\n return;\n\n case charCodes.verticalBar:\n case charCodes.ampersand:\n readToken_pipe_amp(code);\n return;\n\n case charCodes.caret:\n readToken_caret();\n return;\n\n case charCodes.plusSign:\n case charCodes.dash:\n readToken_plus_min(code);\n return;\n\n case charCodes.lessThan:\n readToken_lt();\n return;\n\n case charCodes.greaterThan:\n readToken_gt();\n return;\n\n case charCodes.equalsTo:\n case charCodes.exclamationMark:\n readToken_eq_excl(code);\n return;\n\n case charCodes.tilde:\n finishOp(tt.tilde, 1);\n return;\n\n default:\n break;\n }\n\n unexpected(`Unexpected character '${String.fromCharCode(code)}'`, state.pos);\n}\n\nfunction finishOp(type, size) {\n state.pos += size;\n finishToken(type);\n}\n\nfunction readRegexp() {\n const start = state.pos;\n let escaped = false;\n let inClass = false;\n for (;;) {\n if (state.pos >= input.length) {\n unexpected(\"Unterminated regular expression\", start);\n return;\n }\n const code = input.charCodeAt(state.pos);\n if (escaped) {\n escaped = false;\n } else {\n if (code === charCodes.leftSquareBracket) {\n inClass = true;\n } else if (code === charCodes.rightSquareBracket && inClass) {\n inClass = false;\n } else if (code === charCodes.slash && !inClass) {\n break;\n }\n escaped = code === charCodes.backslash;\n }\n ++state.pos;\n }\n ++state.pos;\n // Need to use `skipWord` because '\\uXXXX' sequences are allowed here (don't ask).\n skipWord();\n\n finishToken(tt.regexp);\n}\n\n/**\n * Read a decimal integer. Note that this can't be unified with the similar code\n * in readRadixNumber (which also handles hex digits) because \"e\" needs to be\n * the end of the integer so that we can properly handle scientific notation.\n */\nfunction readInt() {\n while (true) {\n const code = input.charCodeAt(state.pos);\n if ((code >= charCodes.digit0 && code <= charCodes.digit9) || code === charCodes.underscore) {\n state.pos++;\n } else {\n break;\n }\n }\n}\n\nfunction readRadixNumber() {\n state.pos += 2; // 0x\n\n // Walk to the end of the number, allowing hex digits.\n while (true) {\n const code = input.charCodeAt(state.pos);\n if (\n (code >= charCodes.digit0 && code <= charCodes.digit9) ||\n (code >= charCodes.lowercaseA && code <= charCodes.lowercaseF) ||\n (code >= charCodes.uppercaseA && code <= charCodes.uppercaseF) ||\n code === charCodes.underscore\n ) {\n state.pos++;\n } else {\n break;\n }\n }\n\n const nextChar = input.charCodeAt(state.pos);\n if (nextChar === charCodes.lowercaseN) {\n ++state.pos;\n finishToken(tt.bigint);\n } else {\n finishToken(tt.num);\n }\n}\n\n// Read an integer, octal integer, or floating-point number.\nfunction readNumber(startsWithDot) {\n let isBigInt = false;\n let isDecimal = false;\n\n if (!startsWithDot) {\n readInt();\n }\n\n let nextChar = input.charCodeAt(state.pos);\n if (nextChar === charCodes.dot) {\n ++state.pos;\n readInt();\n nextChar = input.charCodeAt(state.pos);\n }\n\n if (nextChar === charCodes.uppercaseE || nextChar === charCodes.lowercaseE) {\n nextChar = input.charCodeAt(++state.pos);\n if (nextChar === charCodes.plusSign || nextChar === charCodes.dash) {\n ++state.pos;\n }\n readInt();\n nextChar = input.charCodeAt(state.pos);\n }\n\n if (nextChar === charCodes.lowercaseN) {\n ++state.pos;\n isBigInt = true;\n } else if (nextChar === charCodes.lowercaseM) {\n ++state.pos;\n isDecimal = true;\n }\n\n if (isBigInt) {\n finishToken(tt.bigint);\n return;\n }\n\n if (isDecimal) {\n finishToken(tt.decimal);\n return;\n }\n\n finishToken(tt.num);\n}\n\nfunction readString(quote) {\n state.pos++;\n for (;;) {\n if (state.pos >= input.length) {\n unexpected(\"Unterminated string constant\");\n return;\n }\n const ch = input.charCodeAt(state.pos);\n if (ch === charCodes.backslash) {\n state.pos++;\n } else if (ch === quote) {\n break;\n }\n state.pos++;\n }\n state.pos++;\n finishToken(tt.string);\n}\n\n// Reads template string tokens.\nfunction readTmplToken() {\n for (;;) {\n if (state.pos >= input.length) {\n unexpected(\"Unterminated template\");\n return;\n }\n const ch = input.charCodeAt(state.pos);\n if (\n ch === charCodes.graveAccent ||\n (ch === charCodes.dollarSign && input.charCodeAt(state.pos + 1) === charCodes.leftCurlyBrace)\n ) {\n if (state.pos === state.start && match(tt.template)) {\n if (ch === charCodes.dollarSign) {\n state.pos += 2;\n finishToken(tt.dollarBraceL);\n return;\n } else {\n ++state.pos;\n finishToken(tt.backQuote);\n return;\n }\n }\n finishToken(tt.template);\n return;\n }\n if (ch === charCodes.backslash) {\n state.pos++;\n }\n state.pos++;\n }\n}\n\n// Skip to the end of the current word. Note that this is the same as the snippet at the end of\n// readWord, but calling skipWord from readWord seems to slightly hurt performance from some rough\n// measurements.\nexport function skipWord() {\n while (state.pos < input.length) {\n const ch = input.charCodeAt(state.pos);\n if (IS_IDENTIFIER_CHAR[ch]) {\n state.pos++;\n } else if (ch === charCodes.backslash) {\n // \\u\n state.pos += 2;\n if (input.charCodeAt(state.pos) === charCodes.leftCurlyBrace) {\n while (\n state.pos < input.length &&\n input.charCodeAt(state.pos) !== charCodes.rightCurlyBrace\n ) {\n state.pos++;\n }\n state.pos++;\n }\n } else {\n break;\n }\n }\n}\n","import {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Determine information about this named import or named export specifier.\n *\n * This syntax is the `a` from statements like these:\n * import {A} from \"./foo\";\n * export {A};\n * export {A} from \"./foo\";\n *\n * As it turns out, we can exactly characterize the syntax meaning by simply\n * counting the number of tokens, which can be from 1 to 4:\n * {A}\n * {type A}\n * {A as B}\n * {type A as B}\n *\n * In the type case, we never actually need the names in practice, so don't get\n * them.\n *\n * TODO: There's some redundancy with the type detection here and the isType\n * flag that's already present on tokens in TS mode. This function could\n * potentially be simplified and/or pushed to the call sites to avoid the object\n * allocation.\n */\nexport default function getImportExportSpecifierInfo(\n tokens,\n index = tokens.currentIndex(),\n) {\n let endIndex = index + 1;\n if (isSpecifierEnd(tokens, endIndex)) {\n // import {A}\n const name = tokens.identifierNameAtIndex(index);\n return {\n isType: false,\n leftName: name,\n rightName: name,\n endIndex,\n };\n }\n endIndex++;\n if (isSpecifierEnd(tokens, endIndex)) {\n // import {type A}\n return {\n isType: true,\n leftName: null,\n rightName: null,\n endIndex,\n };\n }\n endIndex++;\n if (isSpecifierEnd(tokens, endIndex)) {\n // import {A as B}\n return {\n isType: false,\n leftName: tokens.identifierNameAtIndex(index),\n rightName: tokens.identifierNameAtIndex(index + 2),\n endIndex,\n };\n }\n endIndex++;\n if (isSpecifierEnd(tokens, endIndex)) {\n // import {type A as B}\n return {\n isType: true,\n leftName: null,\n rightName: null,\n endIndex,\n };\n }\n throw new Error(`Unexpected import/export specifier at ${index}`);\n}\n\nfunction isSpecifierEnd(tokens, index) {\n const token = tokens.tokens[index];\n return token.type === tt.braceR || token.type === tt.comma;\n}\n","// Use a Map rather than object to avoid unexpected __proto__ access.\nexport default new Map([\n [\"quot\", \"\\u0022\"],\n [\"amp\", \"&\"],\n [\"apos\", \"\\u0027\"],\n [\"lt\", \"<\"],\n [\"gt\", \">\"],\n [\"nbsp\", \"\\u00A0\"],\n [\"iexcl\", \"\\u00A1\"],\n [\"cent\", \"\\u00A2\"],\n [\"pound\", \"\\u00A3\"],\n [\"curren\", \"\\u00A4\"],\n [\"yen\", \"\\u00A5\"],\n [\"brvbar\", \"\\u00A6\"],\n [\"sect\", \"\\u00A7\"],\n [\"uml\", \"\\u00A8\"],\n [\"copy\", \"\\u00A9\"],\n [\"ordf\", \"\\u00AA\"],\n [\"laquo\", \"\\u00AB\"],\n [\"not\", \"\\u00AC\"],\n [\"shy\", \"\\u00AD\"],\n [\"reg\", \"\\u00AE\"],\n [\"macr\", \"\\u00AF\"],\n [\"deg\", \"\\u00B0\"],\n [\"plusmn\", \"\\u00B1\"],\n [\"sup2\", \"\\u00B2\"],\n [\"sup3\", \"\\u00B3\"],\n [\"acute\", \"\\u00B4\"],\n [\"micro\", \"\\u00B5\"],\n [\"para\", \"\\u00B6\"],\n [\"middot\", \"\\u00B7\"],\n [\"cedil\", \"\\u00B8\"],\n [\"sup1\", \"\\u00B9\"],\n [\"ordm\", \"\\u00BA\"],\n [\"raquo\", \"\\u00BB\"],\n [\"frac14\", \"\\u00BC\"],\n [\"frac12\", \"\\u00BD\"],\n [\"frac34\", \"\\u00BE\"],\n [\"iquest\", \"\\u00BF\"],\n [\"Agrave\", \"\\u00C0\"],\n [\"Aacute\", \"\\u00C1\"],\n [\"Acirc\", \"\\u00C2\"],\n [\"Atilde\", \"\\u00C3\"],\n [\"Auml\", \"\\u00C4\"],\n [\"Aring\", \"\\u00C5\"],\n [\"AElig\", \"\\u00C6\"],\n [\"Ccedil\", \"\\u00C7\"],\n [\"Egrave\", \"\\u00C8\"],\n [\"Eacute\", \"\\u00C9\"],\n [\"Ecirc\", \"\\u00CA\"],\n [\"Euml\", \"\\u00CB\"],\n [\"Igrave\", \"\\u00CC\"],\n [\"Iacute\", \"\\u00CD\"],\n [\"Icirc\", \"\\u00CE\"],\n [\"Iuml\", \"\\u00CF\"],\n [\"ETH\", \"\\u00D0\"],\n [\"Ntilde\", \"\\u00D1\"],\n [\"Ograve\", \"\\u00D2\"],\n [\"Oacute\", \"\\u00D3\"],\n [\"Ocirc\", \"\\u00D4\"],\n [\"Otilde\", \"\\u00D5\"],\n [\"Ouml\", \"\\u00D6\"],\n [\"times\", \"\\u00D7\"],\n [\"Oslash\", \"\\u00D8\"],\n [\"Ugrave\", \"\\u00D9\"],\n [\"Uacute\", \"\\u00DA\"],\n [\"Ucirc\", \"\\u00DB\"],\n [\"Uuml\", \"\\u00DC\"],\n [\"Yacute\", \"\\u00DD\"],\n [\"THORN\", \"\\u00DE\"],\n [\"szlig\", \"\\u00DF\"],\n [\"agrave\", \"\\u00E0\"],\n [\"aacute\", \"\\u00E1\"],\n [\"acirc\", \"\\u00E2\"],\n [\"atilde\", \"\\u00E3\"],\n [\"auml\", \"\\u00E4\"],\n [\"aring\", \"\\u00E5\"],\n [\"aelig\", \"\\u00E6\"],\n [\"ccedil\", \"\\u00E7\"],\n [\"egrave\", \"\\u00E8\"],\n [\"eacute\", \"\\u00E9\"],\n [\"ecirc\", \"\\u00EA\"],\n [\"euml\", \"\\u00EB\"],\n [\"igrave\", \"\\u00EC\"],\n [\"iacute\", \"\\u00ED\"],\n [\"icirc\", \"\\u00EE\"],\n [\"iuml\", \"\\u00EF\"],\n [\"eth\", \"\\u00F0\"],\n [\"ntilde\", \"\\u00F1\"],\n [\"ograve\", \"\\u00F2\"],\n [\"oacute\", \"\\u00F3\"],\n [\"ocirc\", \"\\u00F4\"],\n [\"otilde\", \"\\u00F5\"],\n [\"ouml\", \"\\u00F6\"],\n [\"divide\", \"\\u00F7\"],\n [\"oslash\", \"\\u00F8\"],\n [\"ugrave\", \"\\u00F9\"],\n [\"uacute\", \"\\u00FA\"],\n [\"ucirc\", \"\\u00FB\"],\n [\"uuml\", \"\\u00FC\"],\n [\"yacute\", \"\\u00FD\"],\n [\"thorn\", \"\\u00FE\"],\n [\"yuml\", \"\\u00FF\"],\n [\"OElig\", \"\\u0152\"],\n [\"oelig\", \"\\u0153\"],\n [\"Scaron\", \"\\u0160\"],\n [\"scaron\", \"\\u0161\"],\n [\"Yuml\", \"\\u0178\"],\n [\"fnof\", \"\\u0192\"],\n [\"circ\", \"\\u02C6\"],\n [\"tilde\", \"\\u02DC\"],\n [\"Alpha\", \"\\u0391\"],\n [\"Beta\", \"\\u0392\"],\n [\"Gamma\", \"\\u0393\"],\n [\"Delta\", \"\\u0394\"],\n [\"Epsilon\", \"\\u0395\"],\n [\"Zeta\", \"\\u0396\"],\n [\"Eta\", \"\\u0397\"],\n [\"Theta\", \"\\u0398\"],\n [\"Iota\", \"\\u0399\"],\n [\"Kappa\", \"\\u039A\"],\n [\"Lambda\", \"\\u039B\"],\n [\"Mu\", \"\\u039C\"],\n [\"Nu\", \"\\u039D\"],\n [\"Xi\", \"\\u039E\"],\n [\"Omicron\", \"\\u039F\"],\n [\"Pi\", \"\\u03A0\"],\n [\"Rho\", \"\\u03A1\"],\n [\"Sigma\", \"\\u03A3\"],\n [\"Tau\", \"\\u03A4\"],\n [\"Upsilon\", \"\\u03A5\"],\n [\"Phi\", \"\\u03A6\"],\n [\"Chi\", \"\\u03A7\"],\n [\"Psi\", \"\\u03A8\"],\n [\"Omega\", \"\\u03A9\"],\n [\"alpha\", \"\\u03B1\"],\n [\"beta\", \"\\u03B2\"],\n [\"gamma\", \"\\u03B3\"],\n [\"delta\", \"\\u03B4\"],\n [\"epsilon\", \"\\u03B5\"],\n [\"zeta\", \"\\u03B6\"],\n [\"eta\", \"\\u03B7\"],\n [\"theta\", \"\\u03B8\"],\n [\"iota\", \"\\u03B9\"],\n [\"kappa\", \"\\u03BA\"],\n [\"lambda\", \"\\u03BB\"],\n [\"mu\", \"\\u03BC\"],\n [\"nu\", \"\\u03BD\"],\n [\"xi\", \"\\u03BE\"],\n [\"omicron\", \"\\u03BF\"],\n [\"pi\", \"\\u03C0\"],\n [\"rho\", \"\\u03C1\"],\n [\"sigmaf\", \"\\u03C2\"],\n [\"sigma\", \"\\u03C3\"],\n [\"tau\", \"\\u03C4\"],\n [\"upsilon\", \"\\u03C5\"],\n [\"phi\", \"\\u03C6\"],\n [\"chi\", \"\\u03C7\"],\n [\"psi\", \"\\u03C8\"],\n [\"omega\", \"\\u03C9\"],\n [\"thetasym\", \"\\u03D1\"],\n [\"upsih\", \"\\u03D2\"],\n [\"piv\", \"\\u03D6\"],\n [\"ensp\", \"\\u2002\"],\n [\"emsp\", \"\\u2003\"],\n [\"thinsp\", \"\\u2009\"],\n [\"zwnj\", \"\\u200C\"],\n [\"zwj\", \"\\u200D\"],\n [\"lrm\", \"\\u200E\"],\n [\"rlm\", \"\\u200F\"],\n [\"ndash\", \"\\u2013\"],\n [\"mdash\", \"\\u2014\"],\n [\"lsquo\", \"\\u2018\"],\n [\"rsquo\", \"\\u2019\"],\n [\"sbquo\", \"\\u201A\"],\n [\"ldquo\", \"\\u201C\"],\n [\"rdquo\", \"\\u201D\"],\n [\"bdquo\", \"\\u201E\"],\n [\"dagger\", \"\\u2020\"],\n [\"Dagger\", \"\\u2021\"],\n [\"bull\", \"\\u2022\"],\n [\"hellip\", \"\\u2026\"],\n [\"permil\", \"\\u2030\"],\n [\"prime\", \"\\u2032\"],\n [\"Prime\", \"\\u2033\"],\n [\"lsaquo\", \"\\u2039\"],\n [\"rsaquo\", \"\\u203A\"],\n [\"oline\", \"\\u203E\"],\n [\"frasl\", \"\\u2044\"],\n [\"euro\", \"\\u20AC\"],\n [\"image\", \"\\u2111\"],\n [\"weierp\", \"\\u2118\"],\n [\"real\", \"\\u211C\"],\n [\"trade\", \"\\u2122\"],\n [\"alefsym\", \"\\u2135\"],\n [\"larr\", \"\\u2190\"],\n [\"uarr\", \"\\u2191\"],\n [\"rarr\", \"\\u2192\"],\n [\"darr\", \"\\u2193\"],\n [\"harr\", \"\\u2194\"],\n [\"crarr\", \"\\u21B5\"],\n [\"lArr\", \"\\u21D0\"],\n [\"uArr\", \"\\u21D1\"],\n [\"rArr\", \"\\u21D2\"],\n [\"dArr\", \"\\u21D3\"],\n [\"hArr\", \"\\u21D4\"],\n [\"forall\", \"\\u2200\"],\n [\"part\", \"\\u2202\"],\n [\"exist\", \"\\u2203\"],\n [\"empty\", \"\\u2205\"],\n [\"nabla\", \"\\u2207\"],\n [\"isin\", \"\\u2208\"],\n [\"notin\", \"\\u2209\"],\n [\"ni\", \"\\u220B\"],\n [\"prod\", \"\\u220F\"],\n [\"sum\", \"\\u2211\"],\n [\"minus\", \"\\u2212\"],\n [\"lowast\", \"\\u2217\"],\n [\"radic\", \"\\u221A\"],\n [\"prop\", \"\\u221D\"],\n [\"infin\", \"\\u221E\"],\n [\"ang\", \"\\u2220\"],\n [\"and\", \"\\u2227\"],\n [\"or\", \"\\u2228\"],\n [\"cap\", \"\\u2229\"],\n [\"cup\", \"\\u222A\"],\n [\"int\", \"\\u222B\"],\n [\"there4\", \"\\u2234\"],\n [\"sim\", \"\\u223C\"],\n [\"cong\", \"\\u2245\"],\n [\"asymp\", \"\\u2248\"],\n [\"ne\", \"\\u2260\"],\n [\"equiv\", \"\\u2261\"],\n [\"le\", \"\\u2264\"],\n [\"ge\", \"\\u2265\"],\n [\"sub\", \"\\u2282\"],\n [\"sup\", \"\\u2283\"],\n [\"nsub\", \"\\u2284\"],\n [\"sube\", \"\\u2286\"],\n [\"supe\", \"\\u2287\"],\n [\"oplus\", \"\\u2295\"],\n [\"otimes\", \"\\u2297\"],\n [\"perp\", \"\\u22A5\"],\n [\"sdot\", \"\\u22C5\"],\n [\"lceil\", \"\\u2308\"],\n [\"rceil\", \"\\u2309\"],\n [\"lfloor\", \"\\u230A\"],\n [\"rfloor\", \"\\u230B\"],\n [\"lang\", \"\\u2329\"],\n [\"rang\", \"\\u232A\"],\n [\"loz\", \"\\u25CA\"],\n [\"spades\", \"\\u2660\"],\n [\"clubs\", \"\\u2663\"],\n [\"hearts\", \"\\u2665\"],\n [\"diams\", \"\\u2666\"],\n]);\n","\n\n\n\n\n\n\n\n\nexport default function getJSXPragmaInfo(options) {\n const [base, suffix] = splitPragma(options.jsxPragma || \"React.createElement\");\n const [fragmentBase, fragmentSuffix] = splitPragma(options.jsxFragmentPragma || \"React.Fragment\");\n return {base, suffix, fragmentBase, fragmentSuffix};\n}\n\nfunction splitPragma(pragma) {\n let dotIndex = pragma.indexOf(\".\");\n if (dotIndex === -1) {\n dotIndex = pragma.length;\n }\n return [pragma.slice(0, dotIndex), pragma.slice(dotIndex)];\n}\n","export default class Transformer {\n // Return true if anything was processed, false otherwise.\n \n\n getPrefixCode() {\n return \"\";\n }\n\n getHoistedCode() {\n return \"\";\n }\n\n getSuffixCode() {\n return \"\";\n }\n}\n","\n\n\nimport XHTMLEntities from \"../parser/plugins/jsx/xhtml\";\nimport {JSXRole} from \"../parser/tokenizer\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\nimport {charCodes} from \"../parser/util/charcodes\";\n\nimport getJSXPragmaInfo, {} from \"../util/getJSXPragmaInfo\";\n\nimport Transformer from \"./Transformer\";\n\nexport default class JSXTransformer extends Transformer {\n \n \n \n\n // State for calculating the line number of each JSX tag in development.\n __init() {this.lastLineNumber = 1}\n __init2() {this.lastIndex = 0}\n\n // In development, variable name holding the name of the current file.\n __init3() {this.filenameVarName = null}\n // Mapping of claimed names for imports in the automatic transform, e,g.\n // {jsx: \"_jsx\"}. This determines which imports to generate in the prefix.\n __init4() {this.esmAutomaticImportNameResolutions = {}}\n // When automatically adding imports in CJS mode, we store the variable name\n // holding the imported CJS module so we can require it in the prefix.\n __init5() {this.cjsAutomaticModuleNameResolutions = {}}\n\n constructor(\n rootTransformer,\n tokens,\n importProcessor,\n nameManager,\n options,\n ) {\n super();this.rootTransformer = rootTransformer;this.tokens = tokens;this.importProcessor = importProcessor;this.nameManager = nameManager;this.options = options;JSXTransformer.prototype.__init.call(this);JSXTransformer.prototype.__init2.call(this);JSXTransformer.prototype.__init3.call(this);JSXTransformer.prototype.__init4.call(this);JSXTransformer.prototype.__init5.call(this);;\n this.jsxPragmaInfo = getJSXPragmaInfo(options);\n this.isAutomaticRuntime = options.jsxRuntime === \"automatic\";\n this.jsxImportSource = options.jsxImportSource || \"react\";\n }\n\n process() {\n if (this.tokens.matches1(tt.jsxTagStart)) {\n this.processJSXTag();\n return true;\n }\n return false;\n }\n\n getPrefixCode() {\n let prefix = \"\";\n if (this.filenameVarName) {\n prefix += `const ${this.filenameVarName} = ${JSON.stringify(this.options.filePath || \"\")};`;\n }\n if (this.isAutomaticRuntime) {\n if (this.importProcessor) {\n // CJS mode: emit require statements for all modules that were referenced.\n for (const [path, resolvedName] of Object.entries(this.cjsAutomaticModuleNameResolutions)) {\n prefix += `var ${resolvedName} = require(\"${path}\");`;\n }\n } else {\n // ESM mode: consolidate and emit import statements for referenced names.\n const {createElement: createElementResolution, ...otherResolutions} =\n this.esmAutomaticImportNameResolutions;\n if (createElementResolution) {\n prefix += `import {createElement as ${createElementResolution}} from \"${this.jsxImportSource}\";`;\n }\n const importSpecifiers = Object.entries(otherResolutions)\n .map(([name, resolvedName]) => `${name} as ${resolvedName}`)\n .join(\", \");\n if (importSpecifiers) {\n const importPath =\n this.jsxImportSource + (this.options.production ? \"/jsx-runtime\" : \"/jsx-dev-runtime\");\n prefix += `import {${importSpecifiers}} from \"${importPath}\";`;\n }\n }\n }\n return prefix;\n }\n\n processJSXTag() {\n const {jsxRole, start} = this.tokens.currentToken();\n // Calculate line number information at the very start (if in development\n // mode) so that the information is guaranteed to be queried in token order.\n const elementLocationCode = this.options.production ? null : this.getElementLocationCode(start);\n if (this.isAutomaticRuntime && jsxRole !== JSXRole.KeyAfterPropSpread) {\n this.transformTagToJSXFunc(elementLocationCode, jsxRole);\n } else {\n this.transformTagToCreateElement(elementLocationCode);\n }\n }\n\n getElementLocationCode(firstTokenStart) {\n const lineNumber = this.getLineNumberForIndex(firstTokenStart);\n return `lineNumber: ${lineNumber}`;\n }\n\n /**\n * Get the line number for this source position. This is calculated lazily and\n * must be called in increasing order by index.\n */\n getLineNumberForIndex(index) {\n const code = this.tokens.code;\n while (this.lastIndex < index && this.lastIndex < code.length) {\n if (code[this.lastIndex] === \"\\n\") {\n this.lastLineNumber++;\n }\n this.lastIndex++;\n }\n return this.lastLineNumber;\n }\n\n /**\n * Convert the current JSX element to a call to jsx, jsxs, or jsxDEV. This is\n * the primary transformation for the automatic transform.\n *\n * Example:\n * <div a={1} key={2}>Hello{x}</div>\n * becomes\n * jsxs('div', {a: 1, children: [\"Hello\", x]}, 2)\n */\n transformTagToJSXFunc(elementLocationCode, jsxRole) {\n const isStatic = jsxRole === JSXRole.StaticChildren;\n // First tag is always jsxTagStart.\n this.tokens.replaceToken(this.getJSXFuncInvocationCode(isStatic));\n\n let keyCode = null;\n if (this.tokens.matches1(tt.jsxTagEnd)) {\n // Fragment syntax.\n this.tokens.replaceToken(`${this.getFragmentCode()}, {`);\n this.processAutomaticChildrenAndEndProps(jsxRole);\n } else {\n // Normal open tag or self-closing tag.\n this.processTagIntro();\n this.tokens.appendCode(\", {\");\n keyCode = this.processProps(true);\n\n if (this.tokens.matches2(tt.slash, tt.jsxTagEnd)) {\n // Self-closing tag, no children to add, so close the props.\n this.tokens.appendCode(\"}\");\n } else if (this.tokens.matches1(tt.jsxTagEnd)) {\n // Tag with children.\n this.tokens.removeToken();\n this.processAutomaticChildrenAndEndProps(jsxRole);\n } else {\n throw new Error(\"Expected either /> or > at the end of the tag.\");\n }\n // If a key was present, move it to its own arg. Note that moving code\n // like this will cause line numbers to get out of sync within the JSX\n // element if the key expression has a newline in it. This is unfortunate,\n // but hopefully should be rare.\n if (keyCode) {\n this.tokens.appendCode(`, ${keyCode}`);\n }\n }\n if (!this.options.production) {\n // If the key wasn't already added, add it now so we can correctly set\n // positional args for jsxDEV.\n if (keyCode === null) {\n this.tokens.appendCode(\", void 0\");\n }\n this.tokens.appendCode(`, ${isStatic}, ${this.getDevSource(elementLocationCode)}, this`);\n }\n // We're at the close-tag or the end of a self-closing tag, so remove\n // everything else and close the function call.\n this.tokens.removeInitialToken();\n while (!this.tokens.matches1(tt.jsxTagEnd)) {\n this.tokens.removeToken();\n }\n this.tokens.replaceToken(\")\");\n }\n\n /**\n * Convert the current JSX element to a createElement call. In the classic\n * runtime, this is the only case. In the automatic runtime, this is called\n * as a fallback in some situations.\n *\n * Example:\n * <div a={1} key={2}>Hello{x}</div>\n * becomes\n * React.createElement('div', {a: 1, key: 2}, \"Hello\", x)\n */\n transformTagToCreateElement(elementLocationCode) {\n // First tag is always jsxTagStart.\n this.tokens.replaceToken(this.getCreateElementInvocationCode());\n\n if (this.tokens.matches1(tt.jsxTagEnd)) {\n // Fragment syntax.\n this.tokens.replaceToken(`${this.getFragmentCode()}, null`);\n this.processChildren(true);\n } else {\n // Normal open tag or self-closing tag.\n this.processTagIntro();\n this.processPropsObjectWithDevInfo(elementLocationCode);\n\n if (this.tokens.matches2(tt.slash, tt.jsxTagEnd)) {\n // Self-closing tag; no children to process.\n } else if (this.tokens.matches1(tt.jsxTagEnd)) {\n // Tag with children and a close-tag; process the children as args.\n this.tokens.removeToken();\n this.processChildren(true);\n } else {\n throw new Error(\"Expected either /> or > at the end of the tag.\");\n }\n }\n // We're at the close-tag or the end of a self-closing tag, so remove\n // everything else and close the function call.\n this.tokens.removeInitialToken();\n while (!this.tokens.matches1(tt.jsxTagEnd)) {\n this.tokens.removeToken();\n }\n this.tokens.replaceToken(\")\");\n }\n\n /**\n * Get the code for the relevant function for this context: jsx, jsxs,\n * or jsxDEV. The following open-paren is included as well.\n *\n * These functions are only used for the automatic runtime, so they are always\n * auto-imported, but the auto-import will be either CJS or ESM based on the\n * target module format.\n */\n getJSXFuncInvocationCode(isStatic) {\n if (this.options.production) {\n if (isStatic) {\n return this.claimAutoImportedFuncInvocation(\"jsxs\", \"/jsx-runtime\");\n } else {\n return this.claimAutoImportedFuncInvocation(\"jsx\", \"/jsx-runtime\");\n }\n } else {\n return this.claimAutoImportedFuncInvocation(\"jsxDEV\", \"/jsx-dev-runtime\");\n }\n }\n\n /**\n * Return the code to use for the createElement function, e.g.\n * `React.createElement`, including the following open-paren.\n *\n * This is the main function to use for the classic runtime. For the\n * automatic runtime, this function is used as a fallback function to\n * preserve behavior when there is a prop spread followed by an explicit\n * key. In that automatic runtime case, the function should be automatically\n * imported.\n */\n getCreateElementInvocationCode() {\n if (this.isAutomaticRuntime) {\n return this.claimAutoImportedFuncInvocation(\"createElement\", \"\");\n } else {\n const {jsxPragmaInfo} = this;\n const resolvedPragmaBaseName = this.importProcessor\n ? this.importProcessor.getIdentifierReplacement(jsxPragmaInfo.base) || jsxPragmaInfo.base\n : jsxPragmaInfo.base;\n return `${resolvedPragmaBaseName}${jsxPragmaInfo.suffix}(`;\n }\n }\n\n /**\n * Return the code to use as the component when compiling a shorthand\n * fragment, e.g. `React.Fragment`.\n *\n * This may be called from either the classic or automatic runtime, and\n * the value should be auto-imported for the automatic runtime.\n */\n getFragmentCode() {\n if (this.isAutomaticRuntime) {\n return this.claimAutoImportedName(\n \"Fragment\",\n this.options.production ? \"/jsx-runtime\" : \"/jsx-dev-runtime\",\n );\n } else {\n const {jsxPragmaInfo} = this;\n const resolvedFragmentPragmaBaseName = this.importProcessor\n ? this.importProcessor.getIdentifierReplacement(jsxPragmaInfo.fragmentBase) ||\n jsxPragmaInfo.fragmentBase\n : jsxPragmaInfo.fragmentBase;\n return resolvedFragmentPragmaBaseName + jsxPragmaInfo.fragmentSuffix;\n }\n }\n\n /**\n * Return code that invokes the given function.\n *\n * When the imports transform is enabled, use the CJSImportTransformer\n * strategy of using `.call(void 0, ...` to avoid passing a `this` value in a\n * situation that would otherwise look like a method call.\n */\n claimAutoImportedFuncInvocation(funcName, importPathSuffix) {\n const funcCode = this.claimAutoImportedName(funcName, importPathSuffix);\n if (this.importProcessor) {\n return `${funcCode}.call(void 0, `;\n } else {\n return `${funcCode}(`;\n }\n }\n\n claimAutoImportedName(funcName, importPathSuffix) {\n if (this.importProcessor) {\n // CJS mode: claim a name for the module and mark it for import.\n const path = this.jsxImportSource + importPathSuffix;\n if (!this.cjsAutomaticModuleNameResolutions[path]) {\n this.cjsAutomaticModuleNameResolutions[path] =\n this.importProcessor.getFreeIdentifierForPath(path);\n }\n return `${this.cjsAutomaticModuleNameResolutions[path]}.${funcName}`;\n } else {\n // ESM mode: claim a name for this function and add it to the names that\n // should be auto-imported when the prefix is generated.\n if (!this.esmAutomaticImportNameResolutions[funcName]) {\n this.esmAutomaticImportNameResolutions[funcName] = this.nameManager.claimFreeName(\n `_${funcName}`,\n );\n }\n return this.esmAutomaticImportNameResolutions[funcName];\n }\n }\n\n /**\n * Process the first part of a tag, before any props.\n */\n processTagIntro() {\n // Walk forward until we see one of these patterns:\n // jsxName to start the first prop, preceded by another jsxName to end the tag name.\n // jsxName to start the first prop, preceded by greaterThan to end the type argument.\n // [open brace] to start the first prop.\n // [jsxTagEnd] to end the open-tag.\n // [slash, jsxTagEnd] to end the self-closing tag.\n let introEnd = this.tokens.currentIndex() + 1;\n while (\n this.tokens.tokens[introEnd].isType ||\n (!this.tokens.matches2AtIndex(introEnd - 1, tt.jsxName, tt.jsxName) &&\n !this.tokens.matches2AtIndex(introEnd - 1, tt.greaterThan, tt.jsxName) &&\n !this.tokens.matches1AtIndex(introEnd, tt.braceL) &&\n !this.tokens.matches1AtIndex(introEnd, tt.jsxTagEnd) &&\n !this.tokens.matches2AtIndex(introEnd, tt.slash, tt.jsxTagEnd))\n ) {\n introEnd++;\n }\n if (introEnd === this.tokens.currentIndex() + 1) {\n const tagName = this.tokens.identifierName();\n if (startsWithLowerCase(tagName)) {\n this.tokens.replaceToken(`'${tagName}'`);\n }\n }\n while (this.tokens.currentIndex() < introEnd) {\n this.rootTransformer.processToken();\n }\n }\n\n /**\n * Starting at the beginning of the props, add the props argument to\n * React.createElement, including the comma before it.\n */\n processPropsObjectWithDevInfo(elementLocationCode) {\n const devProps = this.options.production\n ? \"\"\n : `__self: this, __source: ${this.getDevSource(elementLocationCode)}`;\n if (!this.tokens.matches1(tt.jsxName) && !this.tokens.matches1(tt.braceL)) {\n if (devProps) {\n this.tokens.appendCode(`, {${devProps}}`);\n } else {\n this.tokens.appendCode(`, null`);\n }\n return;\n }\n this.tokens.appendCode(`, {`);\n this.processProps(false);\n if (devProps) {\n this.tokens.appendCode(` ${devProps}}`);\n } else {\n this.tokens.appendCode(\"}\");\n }\n }\n\n /**\n * Transform the core part of the props, assuming that a { has already been\n * inserted before us and that a } will be inserted after us.\n *\n * If extractKeyCode is true (i.e. when using any jsx... function), any prop\n * named \"key\" has its code captured and returned rather than being emitted to\n * the output code. This shifts line numbers, and emitting the code later will\n * correct line numbers again. If no key is found or if extractKeyCode is\n * false, this function returns null.\n */\n processProps(extractKeyCode) {\n let keyCode = null;\n while (true) {\n if (this.tokens.matches2(tt.jsxName, tt.eq)) {\n // This is a regular key={value} or key=\"value\" prop.\n const propName = this.tokens.identifierName();\n if (extractKeyCode && propName === \"key\") {\n if (keyCode !== null) {\n // The props list has multiple keys. Different implementations are\n // inconsistent about what to do here: as of this writing, Babel and\n // swc keep the *last* key and completely remove the rest, while\n // TypeScript uses the *first* key and leaves the others as regular\n // props. The React team collaborated with Babel on the\n // implementation of this behavior, so presumably the Babel behavior\n // is the one to use.\n // Since we won't ever be emitting the previous key code, we need to\n // at least emit its newlines here so that the line numbers match up\n // in the long run.\n this.tokens.appendCode(keyCode.replace(/[^\\n]/g, \"\"));\n }\n // key\n this.tokens.removeToken();\n // =\n this.tokens.removeToken();\n const snapshot = this.tokens.snapshot();\n this.processPropValue();\n keyCode = this.tokens.dangerouslyGetAndRemoveCodeSinceSnapshot(snapshot);\n // Don't add a comma\n continue;\n } else {\n this.processPropName(propName);\n this.tokens.replaceToken(\": \");\n this.processPropValue();\n }\n } else if (this.tokens.matches1(tt.jsxName)) {\n // This is a shorthand prop like <input disabled />.\n const propName = this.tokens.identifierName();\n this.processPropName(propName);\n this.tokens.appendCode(\": true\");\n } else if (this.tokens.matches1(tt.braceL)) {\n // This is prop spread, like <div {...getProps()}>, which we can pass\n // through fairly directly as an object spread.\n this.tokens.replaceToken(\"\");\n this.rootTransformer.processBalancedCode();\n this.tokens.replaceToken(\"\");\n } else {\n break;\n }\n this.tokens.appendCode(\",\");\n }\n return keyCode;\n }\n\n processPropName(propName) {\n if (propName.includes(\"-\")) {\n this.tokens.replaceToken(`'${propName}'`);\n } else {\n this.tokens.copyToken();\n }\n }\n\n processPropValue() {\n if (this.tokens.matches1(tt.braceL)) {\n this.tokens.replaceToken(\"\");\n this.rootTransformer.processBalancedCode();\n this.tokens.replaceToken(\"\");\n } else if (this.tokens.matches1(tt.jsxTagStart)) {\n this.processJSXTag();\n } else {\n this.processStringPropValue();\n }\n }\n\n processStringPropValue() {\n const token = this.tokens.currentToken();\n const valueCode = this.tokens.code.slice(token.start + 1, token.end - 1);\n const replacementCode = formatJSXTextReplacement(valueCode);\n const literalCode = formatJSXStringValueLiteral(valueCode);\n this.tokens.replaceToken(literalCode + replacementCode);\n }\n\n /**\n * Starting in the middle of the props object literal, produce an additional\n * prop for the children and close the object literal.\n */\n processAutomaticChildrenAndEndProps(jsxRole) {\n if (jsxRole === JSXRole.StaticChildren) {\n this.tokens.appendCode(\" children: [\");\n this.processChildren(false);\n this.tokens.appendCode(\"]}\");\n } else {\n // The parser information tells us whether we will see a real child or if\n // all remaining children (if any) will resolve to empty. If there are no\n // non-empty children, don't emit a children prop at all, but still\n // process children so that we properly transform the code into nothing.\n if (jsxRole === JSXRole.OneChild) {\n this.tokens.appendCode(\" children: \");\n }\n this.processChildren(false);\n this.tokens.appendCode(\"}\");\n }\n }\n\n /**\n * Transform children into a comma-separated list, which will be either\n * arguments to createElement or array elements of a children prop.\n */\n processChildren(needsInitialComma) {\n let needsComma = needsInitialComma;\n while (true) {\n if (this.tokens.matches2(tt.jsxTagStart, tt.slash)) {\n // Closing tag, so no more children.\n return;\n }\n let didEmitElement = false;\n if (this.tokens.matches1(tt.braceL)) {\n if (this.tokens.matches2(tt.braceL, tt.braceR)) {\n // Empty interpolations and comment-only interpolations are allowed\n // and don't create an extra child arg.\n this.tokens.replaceToken(\"\");\n this.tokens.replaceToken(\"\");\n } else {\n // Interpolated expression.\n this.tokens.replaceToken(needsComma ? \", \" : \"\");\n this.rootTransformer.processBalancedCode();\n this.tokens.replaceToken(\"\");\n didEmitElement = true;\n }\n } else if (this.tokens.matches1(tt.jsxTagStart)) {\n // Child JSX element\n this.tokens.appendCode(needsComma ? \", \" : \"\");\n this.processJSXTag();\n didEmitElement = true;\n } else if (this.tokens.matches1(tt.jsxText) || this.tokens.matches1(tt.jsxEmptyText)) {\n didEmitElement = this.processChildTextElement(needsComma);\n } else {\n throw new Error(\"Unexpected token when processing JSX children.\");\n }\n if (didEmitElement) {\n needsComma = true;\n }\n }\n }\n\n /**\n * Turn a JSX text element into a string literal, or nothing at all if the JSX\n * text resolves to the empty string.\n *\n * Returns true if a string literal is emitted, false otherwise.\n */\n processChildTextElement(needsComma) {\n const token = this.tokens.currentToken();\n const valueCode = this.tokens.code.slice(token.start, token.end);\n const replacementCode = formatJSXTextReplacement(valueCode);\n const literalCode = formatJSXTextLiteral(valueCode);\n if (literalCode === '\"\"') {\n this.tokens.replaceToken(replacementCode);\n return false;\n } else {\n this.tokens.replaceToken(`${needsComma ? \", \" : \"\"}${literalCode}${replacementCode}`);\n return true;\n }\n }\n\n getDevSource(elementLocationCode) {\n return `{fileName: ${this.getFilenameVarName()}, ${elementLocationCode}}`;\n }\n\n getFilenameVarName() {\n if (!this.filenameVarName) {\n this.filenameVarName = this.nameManager.claimFreeName(\"_jsxFileName\");\n }\n return this.filenameVarName;\n }\n}\n\n/**\n * Spec for identifiers: https://tc39.github.io/ecma262/#prod-IdentifierStart.\n *\n * Really only treat anything starting with a-z as tag names. `_`, `$`, `é`\n * should be treated as component names\n */\nexport function startsWithLowerCase(s) {\n const firstChar = s.charCodeAt(0);\n return firstChar >= charCodes.lowercaseA && firstChar <= charCodes.lowercaseZ;\n}\n\n/**\n * Turn the given jsxText string into a JS string literal. Leading and trailing\n * whitespace on lines is removed, except immediately after the open-tag and\n * before the close-tag. Empty lines are completely removed, and spaces are\n * added between lines after that.\n *\n * We use JSON.stringify to introduce escape characters as necessary, and trim\n * the start and end of each line and remove blank lines.\n */\nfunction formatJSXTextLiteral(text) {\n let result = \"\";\n let whitespace = \"\";\n\n let isInInitialLineWhitespace = false;\n let seenNonWhitespace = false;\n for (let i = 0; i < text.length; i++) {\n const c = text[i];\n if (c === \" \" || c === \"\\t\" || c === \"\\r\") {\n if (!isInInitialLineWhitespace) {\n whitespace += c;\n }\n } else if (c === \"\\n\") {\n whitespace = \"\";\n isInInitialLineWhitespace = true;\n } else {\n if (seenNonWhitespace && isInInitialLineWhitespace) {\n result += \" \";\n }\n result += whitespace;\n whitespace = \"\";\n if (c === \"&\") {\n const {entity, newI} = processEntity(text, i + 1);\n i = newI - 1;\n result += entity;\n } else {\n result += c;\n }\n seenNonWhitespace = true;\n isInInitialLineWhitespace = false;\n }\n }\n if (!isInInitialLineWhitespace) {\n result += whitespace;\n }\n return JSON.stringify(result);\n}\n\n/**\n * Produce the code that should be printed after the JSX text string literal,\n * with most content removed, but all newlines preserved and all spacing at the\n * end preserved.\n */\nfunction formatJSXTextReplacement(text) {\n let numNewlines = 0;\n let numSpaces = 0;\n for (const c of text) {\n if (c === \"\\n\") {\n numNewlines++;\n numSpaces = 0;\n } else if (c === \" \") {\n numSpaces++;\n }\n }\n return \"\\n\".repeat(numNewlines) + \" \".repeat(numSpaces);\n}\n\n/**\n * Format a string in the value position of a JSX prop.\n *\n * Use the same implementation as convertAttribute from\n * babel-helper-builder-react-jsx.\n */\nfunction formatJSXStringValueLiteral(text) {\n let result = \"\";\n for (let i = 0; i < text.length; i++) {\n const c = text[i];\n if (c === \"\\n\") {\n if (/\\s/.test(text[i + 1])) {\n result += \" \";\n while (i < text.length && /\\s/.test(text[i + 1])) {\n i++;\n }\n } else {\n result += \"\\n\";\n }\n } else if (c === \"&\") {\n const {entity, newI} = processEntity(text, i + 1);\n result += entity;\n i = newI - 1;\n } else {\n result += c;\n }\n }\n return JSON.stringify(result);\n}\n\n/**\n * Starting at a &, see if there's an HTML entity (specified by name, decimal\n * char code, or hex char code) and return it if so.\n *\n * Modified from jsxReadString in babel-parser.\n */\nfunction processEntity(text, indexAfterAmpersand) {\n let str = \"\";\n let count = 0;\n let entity;\n let i = indexAfterAmpersand;\n\n if (text[i] === \"#\") {\n let radix = 10;\n i++;\n let numStart;\n if (text[i] === \"x\") {\n radix = 16;\n i++;\n numStart = i;\n while (i < text.length && isHexDigit(text.charCodeAt(i))) {\n i++;\n }\n } else {\n numStart = i;\n while (i < text.length && isDecimalDigit(text.charCodeAt(i))) {\n i++;\n }\n }\n if (text[i] === \";\") {\n const numStr = text.slice(numStart, i);\n if (numStr) {\n i++;\n entity = String.fromCodePoint(parseInt(numStr, radix));\n }\n }\n } else {\n while (i < text.length && count++ < 10) {\n const ch = text[i];\n i++;\n if (ch === \";\") {\n entity = XHTMLEntities.get(str);\n break;\n }\n str += ch;\n }\n }\n\n if (!entity) {\n return {entity: \"&\", newI: indexAfterAmpersand};\n }\n return {entity, newI: i};\n}\n\nfunction isDecimalDigit(code) {\n return code >= charCodes.digit0 && code <= charCodes.digit9;\n}\n\nfunction isHexDigit(code) {\n return (\n (code >= charCodes.digit0 && code <= charCodes.digit9) ||\n (code >= charCodes.lowercaseA && code <= charCodes.lowercaseF) ||\n (code >= charCodes.uppercaseA && code <= charCodes.uppercaseF)\n );\n}\n","\nimport {IdentifierRole} from \"../parser/tokenizer\";\nimport {TokenType, TokenType as tt} from \"../parser/tokenizer/types\";\n\nimport {startsWithLowerCase} from \"../transformers/JSXTransformer\";\nimport getJSXPragmaInfo from \"./getJSXPragmaInfo\";\n\nexport function getNonTypeIdentifiers(tokens, options) {\n const jsxPragmaInfo = getJSXPragmaInfo(options);\n const nonTypeIdentifiers = new Set();\n for (let i = 0; i < tokens.tokens.length; i++) {\n const token = tokens.tokens[i];\n if (\n token.type === tt.name &&\n !token.isType &&\n (token.identifierRole === IdentifierRole.Access ||\n token.identifierRole === IdentifierRole.ObjectShorthand ||\n token.identifierRole === IdentifierRole.ExportAccess) &&\n !token.shadowsGlobal\n ) {\n nonTypeIdentifiers.add(tokens.identifierNameForToken(token));\n }\n if (token.type === tt.jsxTagStart) {\n nonTypeIdentifiers.add(jsxPragmaInfo.base);\n }\n if (\n token.type === tt.jsxTagStart &&\n i + 1 < tokens.tokens.length &&\n tokens.tokens[i + 1].type === tt.jsxTagEnd\n ) {\n nonTypeIdentifiers.add(jsxPragmaInfo.base);\n nonTypeIdentifiers.add(jsxPragmaInfo.fragmentBase);\n }\n if (token.type === tt.jsxName && token.identifierRole === IdentifierRole.Access) {\n const identifierName = tokens.identifierNameForToken(token);\n // Lower-case single-component tag names like \"div\" don't count.\n if (!startsWithLowerCase(identifierName) || tokens.tokens[i + 1].type === TokenType.dot) {\n nonTypeIdentifiers.add(tokens.identifierNameForToken(token));\n }\n }\n }\n return nonTypeIdentifiers;\n}\n","\n\n\nimport {isDeclaration} from \"./parser/tokenizer\";\nimport {ContextualKeyword} from \"./parser/tokenizer/keywords\";\nimport {TokenType as tt} from \"./parser/tokenizer/types\";\n\nimport getImportExportSpecifierInfo from \"./util/getImportExportSpecifierInfo\";\nimport {getNonTypeIdentifiers} from \"./util/getNonTypeIdentifiers\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Class responsible for preprocessing and bookkeeping import and export declarations within the\n * file.\n *\n * TypeScript uses a simpler mechanism that does not use functions like interopRequireDefault and\n * interopRequireWildcard, so we also allow that mode for compatibility.\n */\nexport default class CJSImportProcessor {\n __init() {this.nonTypeIdentifiers = new Set()}\n __init2() {this.importInfoByPath = new Map()}\n __init3() {this.importsToReplace = new Map()}\n __init4() {this.identifierReplacements = new Map()}\n __init5() {this.exportBindingsByLocalName = new Map()}\n\n constructor(\n nameManager,\n tokens,\n enableLegacyTypeScriptModuleInterop,\n options,\n isTypeScriptTransformEnabled,\n keepUnusedImports,\n helperManager,\n ) {;this.nameManager = nameManager;this.tokens = tokens;this.enableLegacyTypeScriptModuleInterop = enableLegacyTypeScriptModuleInterop;this.options = options;this.isTypeScriptTransformEnabled = isTypeScriptTransformEnabled;this.keepUnusedImports = keepUnusedImports;this.helperManager = helperManager;CJSImportProcessor.prototype.__init.call(this);CJSImportProcessor.prototype.__init2.call(this);CJSImportProcessor.prototype.__init3.call(this);CJSImportProcessor.prototype.__init4.call(this);CJSImportProcessor.prototype.__init5.call(this);}\n\n preprocessTokens() {\n for (let i = 0; i < this.tokens.tokens.length; i++) {\n if (\n this.tokens.matches1AtIndex(i, tt._import) &&\n !this.tokens.matches3AtIndex(i, tt._import, tt.name, tt.eq)\n ) {\n this.preprocessImportAtIndex(i);\n }\n if (\n this.tokens.matches1AtIndex(i, tt._export) &&\n !this.tokens.matches2AtIndex(i, tt._export, tt.eq)\n ) {\n this.preprocessExportAtIndex(i);\n }\n }\n this.generateImportReplacements();\n }\n\n /**\n * In TypeScript, import statements that only import types should be removed.\n * This includes `import {} from 'foo';`, but not `import 'foo';`.\n */\n pruneTypeOnlyImports() {\n this.nonTypeIdentifiers = getNonTypeIdentifiers(this.tokens, this.options);\n for (const [path, importInfo] of this.importInfoByPath.entries()) {\n if (\n importInfo.hasBareImport ||\n importInfo.hasStarExport ||\n importInfo.exportStarNames.length > 0 ||\n importInfo.namedExports.length > 0\n ) {\n continue;\n }\n const names = [\n ...importInfo.defaultNames,\n ...importInfo.wildcardNames,\n ...importInfo.namedImports.map(({localName}) => localName),\n ];\n if (names.every((name) => this.shouldAutomaticallyElideImportedName(name))) {\n this.importsToReplace.set(path, \"\");\n }\n }\n }\n\n shouldAutomaticallyElideImportedName(name) {\n return (\n this.isTypeScriptTransformEnabled &&\n !this.keepUnusedImports &&\n !this.nonTypeIdentifiers.has(name)\n );\n }\n\n generateImportReplacements() {\n for (const [path, importInfo] of this.importInfoByPath.entries()) {\n const {\n defaultNames,\n wildcardNames,\n namedImports,\n namedExports,\n exportStarNames,\n hasStarExport,\n } = importInfo;\n\n if (\n defaultNames.length === 0 &&\n wildcardNames.length === 0 &&\n namedImports.length === 0 &&\n namedExports.length === 0 &&\n exportStarNames.length === 0 &&\n !hasStarExport\n ) {\n // Import is never used, so don't even assign a name.\n this.importsToReplace.set(path, `require('${path}');`);\n continue;\n }\n\n const primaryImportName = this.getFreeIdentifierForPath(path);\n let secondaryImportName;\n if (this.enableLegacyTypeScriptModuleInterop) {\n secondaryImportName = primaryImportName;\n } else {\n secondaryImportName =\n wildcardNames.length > 0 ? wildcardNames[0] : this.getFreeIdentifierForPath(path);\n }\n let requireCode = `var ${primaryImportName} = require('${path}');`;\n if (wildcardNames.length > 0) {\n for (const wildcardName of wildcardNames) {\n const moduleExpr = this.enableLegacyTypeScriptModuleInterop\n ? primaryImportName\n : `${this.helperManager.getHelperName(\"interopRequireWildcard\")}(${primaryImportName})`;\n requireCode += ` var ${wildcardName} = ${moduleExpr};`;\n }\n } else if (exportStarNames.length > 0 && secondaryImportName !== primaryImportName) {\n requireCode += ` var ${secondaryImportName} = ${this.helperManager.getHelperName(\n \"interopRequireWildcard\",\n )}(${primaryImportName});`;\n } else if (defaultNames.length > 0 && secondaryImportName !== primaryImportName) {\n requireCode += ` var ${secondaryImportName} = ${this.helperManager.getHelperName(\n \"interopRequireDefault\",\n )}(${primaryImportName});`;\n }\n\n for (const {importedName, localName} of namedExports) {\n requireCode += ` ${this.helperManager.getHelperName(\n \"createNamedExportFrom\",\n )}(${primaryImportName}, '${localName}', '${importedName}');`;\n }\n for (const exportStarName of exportStarNames) {\n requireCode += ` exports.${exportStarName} = ${secondaryImportName};`;\n }\n if (hasStarExport) {\n requireCode += ` ${this.helperManager.getHelperName(\n \"createStarExport\",\n )}(${primaryImportName});`;\n }\n\n this.importsToReplace.set(path, requireCode);\n\n for (const defaultName of defaultNames) {\n this.identifierReplacements.set(defaultName, `${secondaryImportName}.default`);\n }\n for (const {importedName, localName} of namedImports) {\n this.identifierReplacements.set(localName, `${primaryImportName}.${importedName}`);\n }\n }\n }\n\n getFreeIdentifierForPath(path) {\n const components = path.split(\"/\");\n const lastComponent = components[components.length - 1];\n const baseName = lastComponent.replace(/\\W/g, \"\");\n return this.nameManager.claimFreeName(`_${baseName}`);\n }\n\n preprocessImportAtIndex(index) {\n const defaultNames = [];\n const wildcardNames = [];\n const namedImports = [];\n\n index++;\n if (\n (this.tokens.matchesContextualAtIndex(index, ContextualKeyword._type) ||\n this.tokens.matches1AtIndex(index, tt._typeof)) &&\n !this.tokens.matches1AtIndex(index + 1, tt.comma) &&\n !this.tokens.matchesContextualAtIndex(index + 1, ContextualKeyword._from)\n ) {\n // import type declaration, so no need to process anything.\n return;\n }\n\n if (this.tokens.matches1AtIndex(index, tt.parenL)) {\n // Dynamic import, so nothing to do\n return;\n }\n\n if (this.tokens.matches1AtIndex(index, tt.name)) {\n defaultNames.push(this.tokens.identifierNameAtIndex(index));\n index++;\n if (this.tokens.matches1AtIndex(index, tt.comma)) {\n index++;\n }\n }\n\n if (this.tokens.matches1AtIndex(index, tt.star)) {\n // * as\n index += 2;\n wildcardNames.push(this.tokens.identifierNameAtIndex(index));\n index++;\n }\n\n if (this.tokens.matches1AtIndex(index, tt.braceL)) {\n const result = this.getNamedImports(index + 1);\n index = result.newIndex;\n\n for (const namedImport of result.namedImports) {\n // Treat {default as X} as a default import to ensure usage of require interop helper\n if (namedImport.importedName === \"default\") {\n defaultNames.push(namedImport.localName);\n } else {\n namedImports.push(namedImport);\n }\n }\n }\n\n if (this.tokens.matchesContextualAtIndex(index, ContextualKeyword._from)) {\n index++;\n }\n\n if (!this.tokens.matches1AtIndex(index, tt.string)) {\n throw new Error(\"Expected string token at the end of import statement.\");\n }\n const path = this.tokens.stringValueAtIndex(index);\n const importInfo = this.getImportInfo(path);\n importInfo.defaultNames.push(...defaultNames);\n importInfo.wildcardNames.push(...wildcardNames);\n importInfo.namedImports.push(...namedImports);\n if (defaultNames.length === 0 && wildcardNames.length === 0 && namedImports.length === 0) {\n importInfo.hasBareImport = true;\n }\n }\n\n preprocessExportAtIndex(index) {\n if (\n this.tokens.matches2AtIndex(index, tt._export, tt._var) ||\n this.tokens.matches2AtIndex(index, tt._export, tt._let) ||\n this.tokens.matches2AtIndex(index, tt._export, tt._const)\n ) {\n this.preprocessVarExportAtIndex(index);\n } else if (\n this.tokens.matches2AtIndex(index, tt._export, tt._function) ||\n this.tokens.matches2AtIndex(index, tt._export, tt._class)\n ) {\n const exportName = this.tokens.identifierNameAtIndex(index + 2);\n this.addExportBinding(exportName, exportName);\n } else if (this.tokens.matches3AtIndex(index, tt._export, tt.name, tt._function)) {\n const exportName = this.tokens.identifierNameAtIndex(index + 3);\n this.addExportBinding(exportName, exportName);\n } else if (this.tokens.matches2AtIndex(index, tt._export, tt.braceL)) {\n this.preprocessNamedExportAtIndex(index);\n } else if (this.tokens.matches2AtIndex(index, tt._export, tt.star)) {\n this.preprocessExportStarAtIndex(index);\n }\n }\n\n preprocessVarExportAtIndex(index) {\n let depth = 0;\n // Handle cases like `export let {x} = y;`, starting at the open-brace in that case.\n for (let i = index + 2; ; i++) {\n if (\n this.tokens.matches1AtIndex(i, tt.braceL) ||\n this.tokens.matches1AtIndex(i, tt.dollarBraceL) ||\n this.tokens.matches1AtIndex(i, tt.bracketL)\n ) {\n depth++;\n } else if (\n this.tokens.matches1AtIndex(i, tt.braceR) ||\n this.tokens.matches1AtIndex(i, tt.bracketR)\n ) {\n depth--;\n } else if (depth === 0 && !this.tokens.matches1AtIndex(i, tt.name)) {\n break;\n } else if (this.tokens.matches1AtIndex(1, tt.eq)) {\n const endIndex = this.tokens.currentToken().rhsEndIndex;\n if (endIndex == null) {\n throw new Error(\"Expected = token with an end index.\");\n }\n i = endIndex - 1;\n } else {\n const token = this.tokens.tokens[i];\n if (isDeclaration(token)) {\n const exportName = this.tokens.identifierNameAtIndex(i);\n this.identifierReplacements.set(exportName, `exports.${exportName}`);\n }\n }\n }\n }\n\n /**\n * Walk this export statement just in case it's an export...from statement.\n * If it is, combine it into the import info for that path. Otherwise, just\n * bail out; it'll be handled later.\n */\n preprocessNamedExportAtIndex(index) {\n // export {\n index += 2;\n const {newIndex, namedImports} = this.getNamedImports(index);\n index = newIndex;\n\n if (this.tokens.matchesContextualAtIndex(index, ContextualKeyword._from)) {\n index++;\n } else {\n // Reinterpret \"a as b\" to be local/exported rather than imported/local.\n for (const {importedName: localName, localName: exportedName} of namedImports) {\n this.addExportBinding(localName, exportedName);\n }\n return;\n }\n\n if (!this.tokens.matches1AtIndex(index, tt.string)) {\n throw new Error(\"Expected string token at the end of import statement.\");\n }\n const path = this.tokens.stringValueAtIndex(index);\n const importInfo = this.getImportInfo(path);\n importInfo.namedExports.push(...namedImports);\n }\n\n preprocessExportStarAtIndex(index) {\n let exportedName = null;\n if (this.tokens.matches3AtIndex(index, tt._export, tt.star, tt._as)) {\n // export * as\n index += 3;\n exportedName = this.tokens.identifierNameAtIndex(index);\n // foo from\n index += 2;\n } else {\n // export * from\n index += 3;\n }\n if (!this.tokens.matches1AtIndex(index, tt.string)) {\n throw new Error(\"Expected string token at the end of star export statement.\");\n }\n const path = this.tokens.stringValueAtIndex(index);\n const importInfo = this.getImportInfo(path);\n if (exportedName !== null) {\n importInfo.exportStarNames.push(exportedName);\n } else {\n importInfo.hasStarExport = true;\n }\n }\n\n getNamedImports(index) {\n const namedImports = [];\n while (true) {\n if (this.tokens.matches1AtIndex(index, tt.braceR)) {\n index++;\n break;\n }\n\n const specifierInfo = getImportExportSpecifierInfo(this.tokens, index);\n index = specifierInfo.endIndex;\n if (!specifierInfo.isType) {\n namedImports.push({\n importedName: specifierInfo.leftName,\n localName: specifierInfo.rightName,\n });\n }\n\n if (this.tokens.matches2AtIndex(index, tt.comma, tt.braceR)) {\n index += 2;\n break;\n } else if (this.tokens.matches1AtIndex(index, tt.braceR)) {\n index++;\n break;\n } else if (this.tokens.matches1AtIndex(index, tt.comma)) {\n index++;\n } else {\n throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.tokens[index])}`);\n }\n }\n return {newIndex: index, namedImports};\n }\n\n /**\n * Get a mutable import info object for this path, creating one if it doesn't\n * exist yet.\n */\n getImportInfo(path) {\n const existingInfo = this.importInfoByPath.get(path);\n if (existingInfo) {\n return existingInfo;\n }\n const newInfo = {\n defaultNames: [],\n wildcardNames: [],\n namedImports: [],\n namedExports: [],\n hasBareImport: false,\n exportStarNames: [],\n hasStarExport: false,\n };\n this.importInfoByPath.set(path, newInfo);\n return newInfo;\n }\n\n addExportBinding(localName, exportedName) {\n if (!this.exportBindingsByLocalName.has(localName)) {\n this.exportBindingsByLocalName.set(localName, []);\n }\n this.exportBindingsByLocalName.get(localName).push(exportedName);\n }\n\n /**\n * Return the code to use for the import for this path, or the empty string if\n * the code has already been \"claimed\" by a previous import.\n */\n claimImportCode(importPath) {\n const result = this.importsToReplace.get(importPath);\n this.importsToReplace.set(importPath, \"\");\n return result || \"\";\n }\n\n getIdentifierReplacement(identifierName) {\n return this.identifierReplacements.get(identifierName) || null;\n }\n\n /**\n * Return a string like `exports.foo = exports.bar`.\n */\n resolveExportBinding(assignedName) {\n const exportedNames = this.exportBindingsByLocalName.get(assignedName);\n if (!exportedNames || exportedNames.length === 0) {\n return null;\n }\n return exportedNames.map((exportedName) => `exports.${exportedName}`).join(\" = \");\n }\n\n /**\n * Return all imported/exported names where we might be interested in whether usages of those\n * names are shadowed.\n */\n getGlobalNames() {\n return new Set([\n ...this.identifierReplacements.keys(),\n ...this.exportBindingsByLocalName.keys(),\n ]);\n }\n}\n","// src/vlq.ts\nvar comma = \",\".charCodeAt(0);\nvar semicolon = \";\".charCodeAt(0);\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar intToChar = new Uint8Array(64);\nvar charToInt = new Uint8Array(128);\nfor (let i = 0; i < chars.length; i++) {\n const c = chars.charCodeAt(i);\n intToChar[i] = c;\n charToInt[c] = i;\n}\nfunction decodeInteger(reader, relative) {\n let value = 0;\n let shift = 0;\n let integer = 0;\n do {\n const c = reader.next();\n integer = charToInt[c];\n value |= (integer & 31) << shift;\n shift += 5;\n } while (integer & 32);\n const shouldNegate = value & 1;\n value >>>= 1;\n if (shouldNegate) {\n value = -2147483648 | -value;\n }\n return relative + value;\n}\nfunction encodeInteger(builder, num, relative) {\n let delta = num - relative;\n delta = delta < 0 ? -delta << 1 | 1 : delta << 1;\n do {\n let clamped = delta & 31;\n delta >>>= 5;\n if (delta > 0) clamped |= 32;\n builder.write(intToChar[clamped]);\n } while (delta > 0);\n return num;\n}\nfunction hasMoreVlq(reader, max) {\n if (reader.pos >= max) return false;\n return reader.peek() !== comma;\n}\n\n// src/strings.ts\nvar bufLength = 1024 * 16;\nvar td = typeof TextDecoder !== \"undefined\" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== \"undefined\" ? {\n decode(buf) {\n const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n return out.toString();\n }\n} : {\n decode(buf) {\n let out = \"\";\n for (let i = 0; i < buf.length; i++) {\n out += String.fromCharCode(buf[i]);\n }\n return out;\n }\n};\nvar StringWriter = class {\n constructor() {\n this.pos = 0;\n this.out = \"\";\n this.buffer = new Uint8Array(bufLength);\n }\n write(v) {\n const { buffer } = this;\n buffer[this.pos++] = v;\n if (this.pos === bufLength) {\n this.out += td.decode(buffer);\n this.pos = 0;\n }\n }\n flush() {\n const { buffer, out, pos } = this;\n return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;\n }\n};\nvar StringReader = class {\n constructor(buffer) {\n this.pos = 0;\n this.buffer = buffer;\n }\n next() {\n return this.buffer.charCodeAt(this.pos++);\n }\n peek() {\n return this.buffer.charCodeAt(this.pos);\n }\n indexOf(char) {\n const { buffer, pos } = this;\n const idx = buffer.indexOf(char, pos);\n return idx === -1 ? buffer.length : idx;\n }\n};\n\n// src/scopes.ts\nvar EMPTY = [];\nfunction decodeOriginalScopes(input) {\n const { length } = input;\n const reader = new StringReader(input);\n const scopes = [];\n const stack = [];\n let line = 0;\n for (; reader.pos < length; reader.pos++) {\n line = decodeInteger(reader, line);\n const column = decodeInteger(reader, 0);\n if (!hasMoreVlq(reader, length)) {\n const last = stack.pop();\n last[2] = line;\n last[3] = column;\n continue;\n }\n const kind = decodeInteger(reader, 0);\n const fields = decodeInteger(reader, 0);\n const hasName = fields & 1;\n const scope = hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind];\n let vars = EMPTY;\n if (hasMoreVlq(reader, length)) {\n vars = [];\n do {\n const varsIndex = decodeInteger(reader, 0);\n vars.push(varsIndex);\n } while (hasMoreVlq(reader, length));\n }\n scope.vars = vars;\n scopes.push(scope);\n stack.push(scope);\n }\n return scopes;\n}\nfunction encodeOriginalScopes(scopes) {\n const writer = new StringWriter();\n for (let i = 0; i < scopes.length; ) {\n i = _encodeOriginalScopes(scopes, i, writer, [0]);\n }\n return writer.flush();\n}\nfunction _encodeOriginalScopes(scopes, index, writer, state) {\n const scope = scopes[index];\n const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope;\n if (index > 0) writer.write(comma);\n state[0] = encodeInteger(writer, startLine, state[0]);\n encodeInteger(writer, startColumn, 0);\n encodeInteger(writer, kind, 0);\n const fields = scope.length === 6 ? 1 : 0;\n encodeInteger(writer, fields, 0);\n if (scope.length === 6) encodeInteger(writer, scope[5], 0);\n for (const v of vars) {\n encodeInteger(writer, v, 0);\n }\n for (index++; index < scopes.length; ) {\n const next = scopes[index];\n const { 0: l, 1: c } = next;\n if (l > endLine || l === endLine && c >= endColumn) {\n break;\n }\n index = _encodeOriginalScopes(scopes, index, writer, state);\n }\n writer.write(comma);\n state[0] = encodeInteger(writer, endLine, state[0]);\n encodeInteger(writer, endColumn, 0);\n return index;\n}\nfunction decodeGeneratedRanges(input) {\n const { length } = input;\n const reader = new StringReader(input);\n const ranges = [];\n const stack = [];\n let genLine = 0;\n let definitionSourcesIndex = 0;\n let definitionScopeIndex = 0;\n let callsiteSourcesIndex = 0;\n let callsiteLine = 0;\n let callsiteColumn = 0;\n let bindingLine = 0;\n let bindingColumn = 0;\n do {\n const semi = reader.indexOf(\";\");\n let genColumn = 0;\n for (; reader.pos < semi; reader.pos++) {\n genColumn = decodeInteger(reader, genColumn);\n if (!hasMoreVlq(reader, semi)) {\n const last = stack.pop();\n last[2] = genLine;\n last[3] = genColumn;\n continue;\n }\n const fields = decodeInteger(reader, 0);\n const hasDefinition = fields & 1;\n const hasCallsite = fields & 2;\n const hasScope = fields & 4;\n let callsite = null;\n let bindings = EMPTY;\n let range;\n if (hasDefinition) {\n const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex);\n definitionScopeIndex = decodeInteger(\n reader,\n definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0\n );\n definitionSourcesIndex = defSourcesIndex;\n range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex];\n } else {\n range = [genLine, genColumn, 0, 0];\n }\n range.isScope = !!hasScope;\n if (hasCallsite) {\n const prevCsi = callsiteSourcesIndex;\n const prevLine = callsiteLine;\n callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex);\n const sameSource = prevCsi === callsiteSourcesIndex;\n callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0);\n callsiteColumn = decodeInteger(\n reader,\n sameSource && prevLine === callsiteLine ? callsiteColumn : 0\n );\n callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn];\n }\n range.callsite = callsite;\n if (hasMoreVlq(reader, semi)) {\n bindings = [];\n do {\n bindingLine = genLine;\n bindingColumn = genColumn;\n const expressionsCount = decodeInteger(reader, 0);\n let expressionRanges;\n if (expressionsCount < -1) {\n expressionRanges = [[decodeInteger(reader, 0)]];\n for (let i = -1; i > expressionsCount; i--) {\n const prevBl = bindingLine;\n bindingLine = decodeInteger(reader, bindingLine);\n bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0);\n const expression = decodeInteger(reader, 0);\n expressionRanges.push([expression, bindingLine, bindingColumn]);\n }\n } else {\n expressionRanges = [[expressionsCount]];\n }\n bindings.push(expressionRanges);\n } while (hasMoreVlq(reader, semi));\n }\n range.bindings = bindings;\n ranges.push(range);\n stack.push(range);\n }\n genLine++;\n reader.pos = semi + 1;\n } while (reader.pos < length);\n return ranges;\n}\nfunction encodeGeneratedRanges(ranges) {\n if (ranges.length === 0) return \"\";\n const writer = new StringWriter();\n for (let i = 0; i < ranges.length; ) {\n i = _encodeGeneratedRanges(ranges, i, writer, [0, 0, 0, 0, 0, 0, 0]);\n }\n return writer.flush();\n}\nfunction _encodeGeneratedRanges(ranges, index, writer, state) {\n const range = ranges[index];\n const {\n 0: startLine,\n 1: startColumn,\n 2: endLine,\n 3: endColumn,\n isScope,\n callsite,\n bindings\n } = range;\n if (state[0] < startLine) {\n catchupLine(writer, state[0], startLine);\n state[0] = startLine;\n state[1] = 0;\n } else if (index > 0) {\n writer.write(comma);\n }\n state[1] = encodeInteger(writer, range[1], state[1]);\n const fields = (range.length === 6 ? 1 : 0) | (callsite ? 2 : 0) | (isScope ? 4 : 0);\n encodeInteger(writer, fields, 0);\n if (range.length === 6) {\n const { 4: sourcesIndex, 5: scopesIndex } = range;\n if (sourcesIndex !== state[2]) {\n state[3] = 0;\n }\n state[2] = encodeInteger(writer, sourcesIndex, state[2]);\n state[3] = encodeInteger(writer, scopesIndex, state[3]);\n }\n if (callsite) {\n const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite;\n if (sourcesIndex !== state[4]) {\n state[5] = 0;\n state[6] = 0;\n } else if (callLine !== state[5]) {\n state[6] = 0;\n }\n state[4] = encodeInteger(writer, sourcesIndex, state[4]);\n state[5] = encodeInteger(writer, callLine, state[5]);\n state[6] = encodeInteger(writer, callColumn, state[6]);\n }\n if (bindings) {\n for (const binding of bindings) {\n if (binding.length > 1) encodeInteger(writer, -binding.length, 0);\n const expression = binding[0][0];\n encodeInteger(writer, expression, 0);\n let bindingStartLine = startLine;\n let bindingStartColumn = startColumn;\n for (let i = 1; i < binding.length; i++) {\n const expRange = binding[i];\n bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine);\n bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn);\n encodeInteger(writer, expRange[0], 0);\n }\n }\n }\n for (index++; index < ranges.length; ) {\n const next = ranges[index];\n const { 0: l, 1: c } = next;\n if (l > endLine || l === endLine && c >= endColumn) {\n break;\n }\n index = _encodeGeneratedRanges(ranges, index, writer, state);\n }\n if (state[0] < endLine) {\n catchupLine(writer, state[0], endLine);\n state[0] = endLine;\n state[1] = 0;\n } else {\n writer.write(comma);\n }\n state[1] = encodeInteger(writer, endColumn, state[1]);\n return index;\n}\nfunction catchupLine(writer, lastLine, line) {\n do {\n writer.write(semicolon);\n } while (++lastLine < line);\n}\n\n// src/sourcemap-codec.ts\nfunction decode(mappings) {\n const { length } = mappings;\n const reader = new StringReader(mappings);\n const decoded = [];\n let genColumn = 0;\n let sourcesIndex = 0;\n let sourceLine = 0;\n let sourceColumn = 0;\n let namesIndex = 0;\n do {\n const semi = reader.indexOf(\";\");\n const line = [];\n let sorted = true;\n let lastCol = 0;\n genColumn = 0;\n while (reader.pos < semi) {\n let seg;\n genColumn = decodeInteger(reader, genColumn);\n if (genColumn < lastCol) sorted = false;\n lastCol = genColumn;\n if (hasMoreVlq(reader, semi)) {\n sourcesIndex = decodeInteger(reader, sourcesIndex);\n sourceLine = decodeInteger(reader, sourceLine);\n sourceColumn = decodeInteger(reader, sourceColumn);\n if (hasMoreVlq(reader, semi)) {\n namesIndex = decodeInteger(reader, namesIndex);\n seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex];\n } else {\n seg = [genColumn, sourcesIndex, sourceLine, sourceColumn];\n }\n } else {\n seg = [genColumn];\n }\n line.push(seg);\n reader.pos++;\n }\n if (!sorted) sort(line);\n decoded.push(line);\n reader.pos = semi + 1;\n } while (reader.pos <= length);\n return decoded;\n}\nfunction sort(line) {\n line.sort(sortComparator);\n}\nfunction sortComparator(a, b) {\n return a[0] - b[0];\n}\nfunction encode(decoded) {\n const writer = new StringWriter();\n let sourcesIndex = 0;\n let sourceLine = 0;\n let sourceColumn = 0;\n let namesIndex = 0;\n for (let i = 0; i < decoded.length; i++) {\n const line = decoded[i];\n if (i > 0) writer.write(semicolon);\n if (line.length === 0) continue;\n let genColumn = 0;\n for (let j = 0; j < line.length; j++) {\n const segment = line[j];\n if (j > 0) writer.write(comma);\n genColumn = encodeInteger(writer, segment[0], genColumn);\n if (segment.length === 1) continue;\n sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);\n sourceLine = encodeInteger(writer, segment[2], sourceLine);\n sourceColumn = encodeInteger(writer, segment[3], sourceColumn);\n if (segment.length === 4) continue;\n namesIndex = encodeInteger(writer, segment[4], namesIndex);\n }\n }\n return writer.flush();\n}\nexport {\n decode,\n decodeGeneratedRanges,\n decodeOriginalScopes,\n encode,\n encodeGeneratedRanges,\n encodeOriginalScopes\n};\n//# sourceMappingURL=sourcemap-codec.mjs.map\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.resolveURI = factory());\n})(this, (function () { 'use strict';\n\n // Matches the scheme of a URL, eg \"http://\"\n const schemeRegex = /^[\\w+.-]+:\\/\\//;\n /**\n * Matches the parts of a URL:\n * 1. Scheme, including \":\", guaranteed.\n * 2. User/password, including \"@\", optional.\n * 3. Host, guaranteed.\n * 4. Port, including \":\", optional.\n * 5. Path, including \"/\", optional.\n * 6. Query, including \"?\", optional.\n * 7. Hash, including \"#\", optional.\n */\n const urlRegex = /^([\\w+.-]+:)\\/\\/([^@/#?]*@)?([^:/#?]*)(:\\d+)?(\\/[^#?]*)?(\\?[^#]*)?(#.*)?/;\n /**\n * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\n * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\n *\n * 1. Host, optional.\n * 2. Path, which may include \"/\", guaranteed.\n * 3. Query, including \"?\", optional.\n * 4. Hash, including \"#\", optional.\n */\n const fileRegex = /^file:(?:\\/\\/((?![a-z]:)[^/#?]*)?)?(\\/?[^#?]*)(\\?[^#]*)?(#.*)?/i;\n function isAbsoluteUrl(input) {\n return schemeRegex.test(input);\n }\n function isSchemeRelativeUrl(input) {\n return input.startsWith('//');\n }\n function isAbsolutePath(input) {\n return input.startsWith('/');\n }\n function isFileUrl(input) {\n return input.startsWith('file:');\n }\n function isRelative(input) {\n return /^[.?#]/.test(input);\n }\n function parseAbsoluteUrl(input) {\n const match = urlRegex.exec(input);\n return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || '');\n }\n function parseFileUrl(input) {\n const match = fileRegex.exec(input);\n const path = match[2];\n return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || '');\n }\n function makeUrl(scheme, user, host, port, path, query, hash) {\n return {\n scheme,\n user,\n host,\n port,\n path,\n query,\n hash,\n type: 7 /* Absolute */,\n };\n }\n function parseUrl(input) {\n if (isSchemeRelativeUrl(input)) {\n const url = parseAbsoluteUrl('http:' + input);\n url.scheme = '';\n url.type = 6 /* SchemeRelative */;\n return url;\n }\n if (isAbsolutePath(input)) {\n const url = parseAbsoluteUrl('http://foo.com' + input);\n url.scheme = '';\n url.host = '';\n url.type = 5 /* AbsolutePath */;\n return url;\n }\n if (isFileUrl(input))\n return parseFileUrl(input);\n if (isAbsoluteUrl(input))\n return parseAbsoluteUrl(input);\n const url = parseAbsoluteUrl('http://foo.com/' + input);\n url.scheme = '';\n url.host = '';\n url.type = input\n ? input.startsWith('?')\n ? 3 /* Query */\n : input.startsWith('#')\n ? 2 /* Hash */\n : 4 /* RelativePath */\n : 1 /* Empty */;\n return url;\n }\n function stripPathFilename(path) {\n // If a path ends with a parent directory \"..\", then it's a relative path with excess parent\n // paths. It's not a file, so we can't strip it.\n if (path.endsWith('/..'))\n return path;\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n }\n function mergePaths(url, base) {\n normalizePath(base, base.type);\n // If the path is just a \"/\", then it was an empty path to begin with (remember, we're a relative\n // path).\n if (url.path === '/') {\n url.path = base.path;\n }\n else {\n // Resolution happens relative to the base path's directory, not the file.\n url.path = stripPathFilename(base.path) + url.path;\n }\n }\n /**\n * The path can have empty directories \"//\", unneeded parents \"foo/..\", or current directory\n * \"foo/.\". We need to normalize to a standard representation.\n */\n function normalizePath(url, type) {\n const rel = type <= 4 /* RelativePath */;\n const pieces = url.path.split('/');\n // We need to preserve the first piece always, so that we output a leading slash. The item at\n // pieces[0] is an empty string.\n let pointer = 1;\n // Positive is the number of real directories we've output, used for popping a parent directory.\n // Eg, \"foo/bar/..\" will have a positive 2, and we can decrement to be left with just \"foo\".\n let positive = 0;\n // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \"foo/\" will\n // generate `[\"foo\", \"\"]` pieces). And, if we pop a parent directory. But once we encounter a\n // real directory, we won't need to append, unless the other conditions happen again.\n let addTrailingSlash = false;\n for (let i = 1; i < pieces.length; i++) {\n const piece = pieces[i];\n // An empty directory, could be a trailing slash, or just a double \"//\" in the path.\n if (!piece) {\n addTrailingSlash = true;\n continue;\n }\n // If we encounter a real directory, then we don't need to append anymore.\n addTrailingSlash = false;\n // A current directory, which we can always drop.\n if (piece === '.')\n continue;\n // A parent directory, we need to see if there are any real directories we can pop. Else, we\n // have an excess of parents, and we'll need to keep the \"..\".\n if (piece === '..') {\n if (positive) {\n addTrailingSlash = true;\n positive--;\n pointer--;\n }\n else if (rel) {\n // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\n // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\n pieces[pointer++] = piece;\n }\n continue;\n }\n // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\n // any popped or dropped directories.\n pieces[pointer++] = piece;\n positive++;\n }\n let path = '';\n for (let i = 1; i < pointer; i++) {\n path += '/' + pieces[i];\n }\n if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\n path += '/';\n }\n url.path = path;\n }\n /**\n * Attempts to resolve `input` URL/path relative to `base`.\n */\n function resolve(input, base) {\n if (!input && !base)\n return '';\n const url = parseUrl(input);\n let inputType = url.type;\n if (base && inputType !== 7 /* Absolute */) {\n const baseUrl = parseUrl(base);\n const baseType = baseUrl.type;\n switch (inputType) {\n case 1 /* Empty */:\n url.hash = baseUrl.hash;\n // fall through\n case 2 /* Hash */:\n url.query = baseUrl.query;\n // fall through\n case 3 /* Query */:\n case 4 /* RelativePath */:\n mergePaths(url, baseUrl);\n // fall through\n case 5 /* AbsolutePath */:\n // The host, user, and port are joined, you can't copy one without the others.\n url.user = baseUrl.user;\n url.host = baseUrl.host;\n url.port = baseUrl.port;\n // fall through\n case 6 /* SchemeRelative */:\n // The input doesn't have a schema at least, so we need to copy at least that over.\n url.scheme = baseUrl.scheme;\n }\n if (baseType > inputType)\n inputType = baseType;\n }\n normalizePath(url, inputType);\n const queryHash = url.query + url.hash;\n switch (inputType) {\n // This is impossible, because of the empty checks at the start of the function.\n // case UrlType.Empty:\n case 2 /* Hash */:\n case 3 /* Query */:\n return queryHash;\n case 4 /* RelativePath */: {\n // The first char is always a \"/\", and we need it to be relative.\n const path = url.path.slice(1);\n if (!path)\n return queryHash || '.';\n if (isRelative(base || input) && !isRelative(path)) {\n // If base started with a leading \".\", or there is no base and input started with a \".\",\n // then we need to ensure that the relative path starts with a \".\". We don't know if\n // relative starts with a \"..\", though, so check before prepending.\n return './' + path + queryHash;\n }\n return path + queryHash;\n }\n case 5 /* AbsolutePath */:\n return url.path + queryHash;\n default:\n return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\n }\n }\n\n return resolve;\n\n}));\n//# sourceMappingURL=resolve-uri.umd.js.map\n","// src/set-array.ts\nvar SetArray = class {\n constructor() {\n this._indexes = { __proto__: null };\n this.array = [];\n }\n};\nfunction cast(set) {\n return set;\n}\nfunction get(setarr, key) {\n return cast(setarr)._indexes[key];\n}\nfunction put(setarr, key) {\n const index = get(setarr, key);\n if (index !== void 0) return index;\n const { array, _indexes: indexes } = cast(setarr);\n const length = array.push(key);\n return indexes[key] = length - 1;\n}\nfunction remove(setarr, key) {\n const index = get(setarr, key);\n if (index === void 0) return;\n const { array, _indexes: indexes } = cast(setarr);\n for (let i = index + 1; i < array.length; i++) {\n const k = array[i];\n array[i - 1] = k;\n indexes[k]--;\n }\n indexes[key] = void 0;\n array.pop();\n}\n\n// src/gen-mapping.ts\nimport {\n encode\n} from \"@jridgewell/sourcemap-codec\";\nimport { TraceMap, decodedMappings } from \"@jridgewell/trace-mapping\";\n\n// src/sourcemap-segment.ts\nvar COLUMN = 0;\nvar SOURCES_INDEX = 1;\nvar SOURCE_LINE = 2;\nvar SOURCE_COLUMN = 3;\nvar NAMES_INDEX = 4;\n\n// src/gen-mapping.ts\nvar NO_NAME = -1;\nvar GenMapping = class {\n constructor({ file, sourceRoot } = {}) {\n this._names = new SetArray();\n this._sources = new SetArray();\n this._sourcesContent = [];\n this._mappings = [];\n this.file = file;\n this.sourceRoot = sourceRoot;\n this._ignoreList = new SetArray();\n }\n};\nfunction cast2(map) {\n return map;\n}\nfunction addSegment(map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) {\n return addSegmentInternal(\n false,\n map,\n genLine,\n genColumn,\n source,\n sourceLine,\n sourceColumn,\n name,\n content\n );\n}\nfunction addMapping(map, mapping) {\n return addMappingInternal(false, map, mapping);\n}\nvar maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\n return addSegmentInternal(\n true,\n map,\n genLine,\n genColumn,\n source,\n sourceLine,\n sourceColumn,\n name,\n content\n );\n};\nvar maybeAddMapping = (map, mapping) => {\n return addMappingInternal(true, map, mapping);\n};\nfunction setSourceContent(map, source, content) {\n const {\n _sources: sources,\n _sourcesContent: sourcesContent\n // _originalScopes: originalScopes,\n } = cast2(map);\n const index = put(sources, source);\n sourcesContent[index] = content;\n}\nfunction setIgnore(map, source, ignore = true) {\n const {\n _sources: sources,\n _sourcesContent: sourcesContent,\n _ignoreList: ignoreList\n // _originalScopes: originalScopes,\n } = cast2(map);\n const index = put(sources, source);\n if (index === sourcesContent.length) sourcesContent[index] = null;\n if (ignore) put(ignoreList, index);\n else remove(ignoreList, index);\n}\nfunction toDecodedMap(map) {\n const {\n _mappings: mappings,\n _sources: sources,\n _sourcesContent: sourcesContent,\n _names: names,\n _ignoreList: ignoreList\n // _originalScopes: originalScopes,\n // _generatedRanges: generatedRanges,\n } = cast2(map);\n removeEmptyFinalLines(mappings);\n return {\n version: 3,\n file: map.file || void 0,\n names: names.array,\n sourceRoot: map.sourceRoot || void 0,\n sources: sources.array,\n sourcesContent,\n mappings,\n // originalScopes,\n // generatedRanges,\n ignoreList: ignoreList.array\n };\n}\nfunction toEncodedMap(map) {\n const decoded = toDecodedMap(map);\n return Object.assign({}, decoded, {\n // originalScopes: decoded.originalScopes.map((os) => encodeOriginalScopes(os)),\n // generatedRanges: encodeGeneratedRanges(decoded.generatedRanges as GeneratedRange[]),\n mappings: encode(decoded.mappings)\n });\n}\nfunction fromMap(input) {\n const map = new TraceMap(input);\n const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });\n putAll(cast2(gen)._names, map.names);\n putAll(cast2(gen)._sources, map.sources);\n cast2(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null);\n cast2(gen)._mappings = decodedMappings(map);\n if (map.ignoreList) putAll(cast2(gen)._ignoreList, map.ignoreList);\n return gen;\n}\nfunction allMappings(map) {\n const out = [];\n const { _mappings: mappings, _sources: sources, _names: names } = cast2(map);\n for (let i = 0; i < mappings.length; i++) {\n const line = mappings[i];\n for (let j = 0; j < line.length; j++) {\n const seg = line[j];\n const generated = { line: i + 1, column: seg[COLUMN] };\n let source = void 0;\n let original = void 0;\n let name = void 0;\n if (seg.length !== 1) {\n source = sources.array[seg[SOURCES_INDEX]];\n original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };\n if (seg.length === 5) name = names.array[seg[NAMES_INDEX]];\n }\n out.push({ generated, source, original, name });\n }\n }\n return out;\n}\nfunction addSegmentInternal(skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) {\n const {\n _mappings: mappings,\n _sources: sources,\n _sourcesContent: sourcesContent,\n _names: names\n // _originalScopes: originalScopes,\n } = cast2(map);\n const line = getIndex(mappings, genLine);\n const index = getColumnIndex(line, genColumn);\n if (!source) {\n if (skipable && skipSourceless(line, index)) return;\n return insert(line, index, [genColumn]);\n }\n assert(sourceLine);\n assert(sourceColumn);\n const sourcesIndex = put(sources, source);\n const namesIndex = name ? put(names, name) : NO_NAME;\n if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content != null ? content : null;\n if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {\n return;\n }\n return insert(\n line,\n index,\n name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn]\n );\n}\nfunction assert(_val) {\n}\nfunction getIndex(arr, index) {\n for (let i = arr.length; i <= index; i++) {\n arr[i] = [];\n }\n return arr[index];\n}\nfunction getColumnIndex(line, genColumn) {\n let index = line.length;\n for (let i = index - 1; i >= 0; index = i--) {\n const current = line[i];\n if (genColumn >= current[COLUMN]) break;\n }\n return index;\n}\nfunction insert(array, index, value) {\n for (let i = array.length; i > index; i--) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n}\nfunction removeEmptyFinalLines(mappings) {\n const { length } = mappings;\n let len = length;\n for (let i = len - 1; i >= 0; len = i, i--) {\n if (mappings[i].length > 0) break;\n }\n if (len < length) mappings.length = len;\n}\nfunction putAll(setarr, array) {\n for (let i = 0; i < array.length; i++) put(setarr, array[i]);\n}\nfunction skipSourceless(line, index) {\n if (index === 0) return true;\n const prev = line[index - 1];\n return prev.length === 1;\n}\nfunction skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) {\n if (index === 0) return false;\n const prev = line[index - 1];\n if (prev.length === 1) return false;\n return sourcesIndex === prev[SOURCES_INDEX] && sourceLine === prev[SOURCE_LINE] && sourceColumn === prev[SOURCE_COLUMN] && namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME);\n}\nfunction addMappingInternal(skipable, map, mapping) {\n const { generated, source, original, name, content } = mapping;\n if (!source) {\n return addSegmentInternal(\n skipable,\n map,\n generated.line - 1,\n generated.column,\n null,\n null,\n null,\n null,\n null\n );\n }\n assert(original);\n return addSegmentInternal(\n skipable,\n map,\n generated.line - 1,\n generated.column,\n source,\n original.line - 1,\n original.column,\n name,\n content\n );\n}\nexport {\n GenMapping,\n addMapping,\n addSegment,\n allMappings,\n fromMap,\n maybeAddMapping,\n maybeAddSegment,\n setIgnore,\n setSourceContent,\n toDecodedMap,\n toEncodedMap\n};\n//# sourceMappingURL=gen-mapping.mjs.map\n","import {GenMapping, maybeAddSegment, toEncodedMap} from \"@jridgewell/gen-mapping\";\n\n\n\nimport {charCodes} from \"./parser/util/charcodes\";\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Generate a source map indicating that each line maps directly to the original line,\n * with the tokens in their new positions.\n */\nexport default function computeSourceMap(\n {code: generatedCode, mappings: rawMappings},\n filePath,\n options,\n source,\n tokens,\n) {\n const sourceColumns = computeSourceColumns(source, tokens);\n const map = new GenMapping({file: options.compiledFilename});\n let tokenIndex = 0;\n // currentMapping is the output source index for the current input token being\n // considered.\n let currentMapping = rawMappings[0];\n while (currentMapping === undefined && tokenIndex < rawMappings.length - 1) {\n tokenIndex++;\n currentMapping = rawMappings[tokenIndex];\n }\n let line = 0;\n let lineStart = 0;\n if (currentMapping !== lineStart) {\n maybeAddSegment(map, line, 0, filePath, line, 0);\n }\n for (let i = 0; i < generatedCode.length; i++) {\n if (i === currentMapping) {\n const genColumn = currentMapping - lineStart;\n const sourceColumn = sourceColumns[tokenIndex];\n maybeAddSegment(map, line, genColumn, filePath, line, sourceColumn);\n while (\n (currentMapping === i || currentMapping === undefined) &&\n tokenIndex < rawMappings.length - 1\n ) {\n tokenIndex++;\n currentMapping = rawMappings[tokenIndex];\n }\n }\n if (generatedCode.charCodeAt(i) === charCodes.lineFeed) {\n line++;\n lineStart = i + 1;\n if (currentMapping !== lineStart) {\n maybeAddSegment(map, line, 0, filePath, line, 0);\n }\n }\n }\n const {sourceRoot, sourcesContent, ...sourceMap} = toEncodedMap(map);\n return sourceMap ;\n}\n\n/**\n * Create an array mapping each token index to the 0-based column of the start\n * position of the token.\n */\nfunction computeSourceColumns(code, tokens) {\n const sourceColumns = new Array(tokens.length);\n let tokenIndex = 0;\n let currentMapping = tokens[tokenIndex].start;\n let lineStart = 0;\n for (let i = 0; i < code.length; i++) {\n if (i === currentMapping) {\n sourceColumns[tokenIndex] = currentMapping - lineStart;\n tokenIndex++;\n currentMapping = tokens[tokenIndex].start;\n }\n if (code.charCodeAt(i) === charCodes.lineFeed) {\n lineStart = i + 1;\n }\n }\n return sourceColumns;\n}\n","\n\nconst HELPERS = {\n require: `\n import {createRequire as CREATE_REQUIRE_NAME} from \"module\";\n const require = CREATE_REQUIRE_NAME(import.meta.url);\n `,\n interopRequireWildcard: `\n function interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n return newObj;\n }\n }\n `,\n interopRequireDefault: `\n function interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n `,\n createNamedExportFrom: `\n function createNamedExportFrom(obj, localName, importedName) {\n Object.defineProperty(exports, localName, {enumerable: true, configurable: true, get: () => obj[importedName]});\n }\n `,\n // Note that TypeScript and Babel do this differently; TypeScript does a simple existence\n // check in the exports object and does a plain assignment, whereas Babel uses\n // defineProperty and builds an object of explicitly-exported names so that star exports can\n // always take lower precedence. For now, we do the easier TypeScript thing.\n createStarExport: `\n function createStarExport(obj) {\n Object.keys(obj)\n .filter((key) => key !== \"default\" && key !== \"__esModule\")\n .forEach((key) => {\n if (exports.hasOwnProperty(key)) {\n return;\n }\n Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]});\n });\n }\n `,\n nullishCoalesce: `\n function nullishCoalesce(lhs, rhsFn) {\n if (lhs != null) {\n return lhs;\n } else {\n return rhsFn();\n }\n }\n `,\n asyncNullishCoalesce: `\n async function asyncNullishCoalesce(lhs, rhsFn) {\n if (lhs != null) {\n return lhs;\n } else {\n return await rhsFn();\n }\n }\n `,\n optionalChain: `\n function optionalChain(ops) {\n let lastAccessLHS = undefined;\n let value = ops[0];\n let i = 1;\n while (i < ops.length) {\n const op = ops[i];\n const fn = ops[i + 1];\n i += 2;\n if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n return undefined;\n }\n if (op === 'access' || op === 'optionalAccess') {\n lastAccessLHS = value;\n value = fn(value);\n } else if (op === 'call' || op === 'optionalCall') {\n value = fn((...args) => value.call(lastAccessLHS, ...args));\n lastAccessLHS = undefined;\n }\n }\n return value;\n }\n `,\n asyncOptionalChain: `\n async function asyncOptionalChain(ops) {\n let lastAccessLHS = undefined;\n let value = ops[0];\n let i = 1;\n while (i < ops.length) {\n const op = ops[i];\n const fn = ops[i + 1];\n i += 2;\n if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n return undefined;\n }\n if (op === 'access' || op === 'optionalAccess') {\n lastAccessLHS = value;\n value = await fn(value);\n } else if (op === 'call' || op === 'optionalCall') {\n value = await fn((...args) => value.call(lastAccessLHS, ...args));\n lastAccessLHS = undefined;\n }\n }\n return value;\n }\n `,\n optionalChainDelete: `\n function optionalChainDelete(ops) {\n const result = OPTIONAL_CHAIN_NAME(ops);\n return result == null ? true : result;\n }\n `,\n asyncOptionalChainDelete: `\n async function asyncOptionalChainDelete(ops) {\n const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops);\n return result == null ? true : result;\n }\n `,\n};\n\nexport class HelperManager {\n __init() {this.helperNames = {}}\n __init2() {this.createRequireName = null}\n constructor( nameManager) {;this.nameManager = nameManager;HelperManager.prototype.__init.call(this);HelperManager.prototype.__init2.call(this);}\n\n getHelperName(baseName) {\n let helperName = this.helperNames[baseName];\n if (helperName) {\n return helperName;\n }\n helperName = this.nameManager.claimFreeName(`_${baseName}`);\n this.helperNames[baseName] = helperName;\n return helperName;\n }\n\n emitHelpers() {\n let resultCode = \"\";\n if (this.helperNames.optionalChainDelete) {\n this.getHelperName(\"optionalChain\");\n }\n if (this.helperNames.asyncOptionalChainDelete) {\n this.getHelperName(\"asyncOptionalChain\");\n }\n for (const [baseName, helperCodeTemplate] of Object.entries(HELPERS)) {\n const helperName = this.helperNames[baseName];\n let helperCode = helperCodeTemplate;\n if (baseName === \"optionalChainDelete\") {\n helperCode = helperCode.replace(\"OPTIONAL_CHAIN_NAME\", this.helperNames.optionalChain);\n } else if (baseName === \"asyncOptionalChainDelete\") {\n helperCode = helperCode.replace(\n \"ASYNC_OPTIONAL_CHAIN_NAME\",\n this.helperNames.asyncOptionalChain,\n );\n } else if (baseName === \"require\") {\n if (this.createRequireName === null) {\n this.createRequireName = this.nameManager.claimFreeName(\"_createRequire\");\n }\n helperCode = helperCode.replace(/CREATE_REQUIRE_NAME/g, this.createRequireName);\n }\n if (helperName) {\n resultCode += \" \";\n resultCode += helperCode.replace(baseName, helperName).replace(/\\s+/g, \" \").trim();\n }\n }\n return resultCode;\n }\n}\n","import {\n isBlockScopedDeclaration,\n isFunctionScopedDeclaration,\n isNonTopLevelDeclaration,\n} from \"./parser/tokenizer\";\n\nimport {TokenType as tt} from \"./parser/tokenizer/types\";\n\n\n/**\n * Traverse the given tokens and modify them if necessary to indicate that some names shadow global\n * variables.\n */\nexport default function identifyShadowedGlobals(\n tokens,\n scopes,\n globalNames,\n) {\n if (!hasShadowedGlobals(tokens, globalNames)) {\n return;\n }\n markShadowedGlobals(tokens, scopes, globalNames);\n}\n\n/**\n * We can do a fast up-front check to see if there are any declarations to global names. If not,\n * then there's no point in computing scope assignments.\n */\n// Exported for testing.\nexport function hasShadowedGlobals(tokens, globalNames) {\n for (const token of tokens.tokens) {\n if (\n token.type === tt.name &&\n !token.isType &&\n isNonTopLevelDeclaration(token) &&\n globalNames.has(tokens.identifierNameForToken(token))\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction markShadowedGlobals(\n tokens,\n scopes,\n globalNames,\n) {\n const scopeStack = [];\n let scopeIndex = scopes.length - 1;\n // Scopes were generated at completion time, so they're sorted by end index, so we can maintain a\n // good stack by going backwards through them.\n for (let i = tokens.tokens.length - 1; ; i--) {\n while (scopeStack.length > 0 && scopeStack[scopeStack.length - 1].startTokenIndex === i + 1) {\n scopeStack.pop();\n }\n while (scopeIndex >= 0 && scopes[scopeIndex].endTokenIndex === i + 1) {\n scopeStack.push(scopes[scopeIndex]);\n scopeIndex--;\n }\n // Process scopes after the last iteration so we can make sure we pop all of them.\n if (i < 0) {\n break;\n }\n\n const token = tokens.tokens[i];\n const name = tokens.identifierNameForToken(token);\n if (scopeStack.length > 1 && !token.isType && token.type === tt.name && globalNames.has(name)) {\n if (isBlockScopedDeclaration(token)) {\n markShadowedForScope(scopeStack[scopeStack.length - 1], tokens, name);\n } else if (isFunctionScopedDeclaration(token)) {\n let stackIndex = scopeStack.length - 1;\n while (stackIndex > 0 && !scopeStack[stackIndex].isFunctionScope) {\n stackIndex--;\n }\n if (stackIndex < 0) {\n throw new Error(\"Did not find parent function scope.\");\n }\n markShadowedForScope(scopeStack[stackIndex], tokens, name);\n }\n }\n }\n if (scopeStack.length > 0) {\n throw new Error(\"Expected empty scope stack after processing file.\");\n }\n}\n\nfunction markShadowedForScope(scope, tokens, name) {\n for (let i = scope.startTokenIndex; i < scope.endTokenIndex; i++) {\n const token = tokens.tokens[i];\n if (\n (token.type === tt.name || token.type === tt.jsxName) &&\n tokens.identifierNameForToken(token) === name\n ) {\n token.shadowsGlobal = true;\n }\n }\n}\n","\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\n/**\n * Get all identifier names in the code, in order, including duplicates.\n */\nexport default function getIdentifierNames(code, tokens) {\n const names = [];\n for (const token of tokens) {\n if (token.type === tt.name) {\n names.push(code.slice(token.start, token.end));\n }\n }\n return names;\n}\n","\nimport getIdentifierNames from \"./util/getIdentifierNames\";\n\nexport default class NameManager {\n __init() {this.usedNames = new Set()}\n\n constructor(code, tokens) {;NameManager.prototype.__init.call(this);\n this.usedNames = new Set(getIdentifierNames(code, tokens));\n }\n\n claimFreeName(name) {\n const newName = this.findFreeName(name);\n this.usedNames.add(newName);\n return newName;\n }\n\n findFreeName(name) {\n if (!this.usedNames.has(name)) {\n return name;\n }\n let suffixNum = 2;\n while (this.usedNames.has(name + String(suffixNum))) {\n suffixNum++;\n }\n return name + String(suffixNum);\n }\n}\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DetailContext = exports.NoopContext = exports.VError = void 0;\n/**\n * Error thrown by validation. Besides an informative message, it includes the path to the\n * property which triggered the failure.\n */\nvar VError = /** @class */ (function (_super) {\n __extends(VError, _super);\n function VError(path, message) {\n var _this = _super.call(this, message) || this;\n _this.path = path;\n // See https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work for info about this workaround.\n Object.setPrototypeOf(_this, VError.prototype);\n return _this;\n }\n return VError;\n}(Error));\nexports.VError = VError;\n/**\n * Fast implementation of IContext used for first-pass validation. If that fails, we can validate\n * using DetailContext to collect error messages. That's faster for the common case when messages\n * normally pass validation.\n */\nvar NoopContext = /** @class */ (function () {\n function NoopContext() {\n }\n NoopContext.prototype.fail = function (relPath, message, score) {\n return false;\n };\n NoopContext.prototype.unionResolver = function () { return this; };\n NoopContext.prototype.createContext = function () { return this; };\n NoopContext.prototype.resolveUnion = function (ur) { };\n return NoopContext;\n}());\nexports.NoopContext = NoopContext;\n/**\n * Complete implementation of IContext that collects meaningfull errors.\n */\nvar DetailContext = /** @class */ (function () {\n function DetailContext() {\n // Stack of property names and associated messages for reporting helpful error messages.\n this._propNames = [\"\"];\n this._messages = [null];\n // Score is used to choose the best union member whose DetailContext to use for reporting.\n // Higher score means better match (or rather less severe mismatch).\n this._score = 0;\n }\n DetailContext.prototype.fail = function (relPath, message, score) {\n this._propNames.push(relPath);\n this._messages.push(message);\n this._score += score;\n return false;\n };\n DetailContext.prototype.unionResolver = function () {\n return new DetailUnionResolver();\n };\n DetailContext.prototype.resolveUnion = function (unionResolver) {\n var _a, _b;\n var u = unionResolver;\n var best = null;\n for (var _i = 0, _c = u.contexts; _i < _c.length; _i++) {\n var ctx = _c[_i];\n if (!best || ctx._score >= best._score) {\n best = ctx;\n }\n }\n if (best && best._score > 0) {\n (_a = this._propNames).push.apply(_a, best._propNames);\n (_b = this._messages).push.apply(_b, best._messages);\n }\n };\n DetailContext.prototype.getError = function (path) {\n var msgParts = [];\n for (var i = this._propNames.length - 1; i >= 0; i--) {\n var p = this._propNames[i];\n path += (typeof p === \"number\") ? \"[\" + p + \"]\" : (p ? \".\" + p : \"\");\n var m = this._messages[i];\n if (m) {\n msgParts.push(path + \" \" + m);\n }\n }\n return new VError(path, msgParts.join(\"; \"));\n };\n DetailContext.prototype.getErrorDetail = function (path) {\n var details = [];\n for (var i = this._propNames.length - 1; i >= 0; i--) {\n var p = this._propNames[i];\n path += (typeof p === \"number\") ? \"[\" + p + \"]\" : (p ? \".\" + p : \"\");\n var message = this._messages[i];\n if (message) {\n details.push({ path: path, message: message });\n }\n }\n var detail = null;\n for (var i = details.length - 1; i >= 0; i--) {\n if (detail) {\n details[i].nested = [detail];\n }\n detail = details[i];\n }\n return detail;\n };\n return DetailContext;\n}());\nexports.DetailContext = DetailContext;\nvar DetailUnionResolver = /** @class */ (function () {\n function DetailUnionResolver() {\n this.contexts = [];\n }\n DetailUnionResolver.prototype.createContext = function () {\n var ctx = new DetailContext();\n this.contexts.push(ctx);\n return ctx;\n };\n return DetailUnionResolver;\n}());\n","\"use strict\";\n/**\n * This module defines nodes used to define types and validations for objects and interfaces.\n */\n// tslint:disable:no-shadowed-variable prefer-for-of\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.basicTypes = exports.BasicType = exports.TParamList = exports.TParam = exports.param = exports.TFunc = exports.func = exports.TProp = exports.TOptional = exports.opt = exports.TIface = exports.iface = exports.TEnumLiteral = exports.enumlit = exports.TEnumType = exports.enumtype = exports.TIntersection = exports.intersection = exports.TUnion = exports.union = exports.TTuple = exports.tuple = exports.TArray = exports.array = exports.TLiteral = exports.lit = exports.TName = exports.name = exports.TType = void 0;\nvar util_1 = require(\"./util\");\n/** Node that represents a type. */\nvar TType = /** @class */ (function () {\n function TType() {\n }\n return TType;\n}());\nexports.TType = TType;\n/** Parses a type spec into a TType node. */\nfunction parseSpec(typeSpec) {\n return typeof typeSpec === \"string\" ? name(typeSpec) : typeSpec;\n}\nfunction getNamedType(suite, name) {\n var ttype = suite[name];\n if (!ttype) {\n throw new Error(\"Unknown type \" + name);\n }\n return ttype;\n}\n/**\n * Defines a type name, either built-in, or defined in this suite. It can typically be included in\n * the specs as just a plain string.\n */\nfunction name(value) { return new TName(value); }\nexports.name = name;\nvar TName = /** @class */ (function (_super) {\n __extends(TName, _super);\n function TName(name) {\n var _this = _super.call(this) || this;\n _this.name = name;\n _this._failMsg = \"is not a \" + name;\n return _this;\n }\n TName.prototype.getChecker = function (suite, strict, allowedProps) {\n var _this = this;\n var ttype = getNamedType(suite, this.name);\n var checker = ttype.getChecker(suite, strict, allowedProps);\n if (ttype instanceof BasicType || ttype instanceof TName) {\n return checker;\n }\n // For complex types, add an additional \"is not a <Type>\" message on failure.\n return function (value, ctx) { return checker(value, ctx) ? true : ctx.fail(null, _this._failMsg, 0); };\n };\n return TName;\n}(TType));\nexports.TName = TName;\n/**\n * Defines a literal value, e.g. lit('hello') or lit(123).\n */\nfunction lit(value) { return new TLiteral(value); }\nexports.lit = lit;\nvar TLiteral = /** @class */ (function (_super) {\n __extends(TLiteral, _super);\n function TLiteral(value) {\n var _this = _super.call(this) || this;\n _this.value = value;\n _this.name = JSON.stringify(value);\n _this._failMsg = \"is not \" + _this.name;\n return _this;\n }\n TLiteral.prototype.getChecker = function (suite, strict) {\n var _this = this;\n return function (value, ctx) { return (value === _this.value) ? true : ctx.fail(null, _this._failMsg, -1); };\n };\n return TLiteral;\n}(TType));\nexports.TLiteral = TLiteral;\n/**\n * Defines an array type, e.g. array('number').\n */\nfunction array(typeSpec) { return new TArray(parseSpec(typeSpec)); }\nexports.array = array;\nvar TArray = /** @class */ (function (_super) {\n __extends(TArray, _super);\n function TArray(ttype) {\n var _this = _super.call(this) || this;\n _this.ttype = ttype;\n return _this;\n }\n TArray.prototype.getChecker = function (suite, strict) {\n var itemChecker = this.ttype.getChecker(suite, strict);\n return function (value, ctx) {\n if (!Array.isArray(value)) {\n return ctx.fail(null, \"is not an array\", 0);\n }\n for (var i = 0; i < value.length; i++) {\n var ok = itemChecker(value[i], ctx);\n if (!ok) {\n return ctx.fail(i, null, 1);\n }\n }\n return true;\n };\n };\n return TArray;\n}(TType));\nexports.TArray = TArray;\n/**\n * Defines a tuple type, e.g. tuple('string', 'number').\n */\nfunction tuple() {\n var typeSpec = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n typeSpec[_i] = arguments[_i];\n }\n return new TTuple(typeSpec.map(function (t) { return parseSpec(t); }));\n}\nexports.tuple = tuple;\nvar TTuple = /** @class */ (function (_super) {\n __extends(TTuple, _super);\n function TTuple(ttypes) {\n var _this = _super.call(this) || this;\n _this.ttypes = ttypes;\n return _this;\n }\n TTuple.prototype.getChecker = function (suite, strict) {\n var itemCheckers = this.ttypes.map(function (t) { return t.getChecker(suite, strict); });\n var checker = function (value, ctx) {\n if (!Array.isArray(value)) {\n return ctx.fail(null, \"is not an array\", 0);\n }\n for (var i = 0; i < itemCheckers.length; i++) {\n var ok = itemCheckers[i](value[i], ctx);\n if (!ok) {\n return ctx.fail(i, null, 1);\n }\n }\n return true;\n };\n if (!strict) {\n return checker;\n }\n return function (value, ctx) {\n if (!checker(value, ctx)) {\n return false;\n }\n return value.length <= itemCheckers.length ? true :\n ctx.fail(itemCheckers.length, \"is extraneous\", 2);\n };\n };\n return TTuple;\n}(TType));\nexports.TTuple = TTuple;\n/**\n * Defines a union type, e.g. union('number', 'null').\n */\nfunction union() {\n var typeSpec = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n typeSpec[_i] = arguments[_i];\n }\n return new TUnion(typeSpec.map(function (t) { return parseSpec(t); }));\n}\nexports.union = union;\nvar TUnion = /** @class */ (function (_super) {\n __extends(TUnion, _super);\n function TUnion(ttypes) {\n var _this = _super.call(this) || this;\n _this.ttypes = ttypes;\n var names = ttypes.map(function (t) { return t instanceof TName || t instanceof TLiteral ? t.name : null; })\n .filter(function (n) { return n; });\n var otherTypes = ttypes.length - names.length;\n if (names.length) {\n if (otherTypes > 0) {\n names.push(otherTypes + \" more\");\n }\n _this._failMsg = \"is none of \" + names.join(\", \");\n }\n else {\n _this._failMsg = \"is none of \" + otherTypes + \" types\";\n }\n return _this;\n }\n TUnion.prototype.getChecker = function (suite, strict) {\n var _this = this;\n var itemCheckers = this.ttypes.map(function (t) { return t.getChecker(suite, strict); });\n return function (value, ctx) {\n var ur = ctx.unionResolver();\n for (var i = 0; i < itemCheckers.length; i++) {\n var ok = itemCheckers[i](value, ur.createContext());\n if (ok) {\n return true;\n }\n }\n ctx.resolveUnion(ur);\n return ctx.fail(null, _this._failMsg, 0);\n };\n };\n return TUnion;\n}(TType));\nexports.TUnion = TUnion;\n/**\n * Defines an intersection type, e.g. intersection('number', 'null').\n */\nfunction intersection() {\n var typeSpec = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n typeSpec[_i] = arguments[_i];\n }\n return new TIntersection(typeSpec.map(function (t) { return parseSpec(t); }));\n}\nexports.intersection = intersection;\nvar TIntersection = /** @class */ (function (_super) {\n __extends(TIntersection, _super);\n function TIntersection(ttypes) {\n var _this = _super.call(this) || this;\n _this.ttypes = ttypes;\n return _this;\n }\n TIntersection.prototype.getChecker = function (suite, strict) {\n var allowedProps = new Set();\n var itemCheckers = this.ttypes.map(function (t) { return t.getChecker(suite, strict, allowedProps); });\n return function (value, ctx) {\n var ok = itemCheckers.every(function (checker) { return checker(value, ctx); });\n if (ok) {\n return true;\n }\n return ctx.fail(null, null, 0);\n };\n };\n return TIntersection;\n}(TType));\nexports.TIntersection = TIntersection;\n/**\n * Defines an enum type, e.g. enum({'A': 1, 'B': 2}).\n */\nfunction enumtype(values) {\n return new TEnumType(values);\n}\nexports.enumtype = enumtype;\nvar TEnumType = /** @class */ (function (_super) {\n __extends(TEnumType, _super);\n function TEnumType(members) {\n var _this = _super.call(this) || this;\n _this.members = members;\n _this.validValues = new Set();\n _this._failMsg = \"is not a valid enum value\";\n _this.validValues = new Set(Object.keys(members).map(function (name) { return members[name]; }));\n return _this;\n }\n TEnumType.prototype.getChecker = function (suite, strict) {\n var _this = this;\n return function (value, ctx) {\n return (_this.validValues.has(value) ? true : ctx.fail(null, _this._failMsg, 0));\n };\n };\n return TEnumType;\n}(TType));\nexports.TEnumType = TEnumType;\n/**\n * Defines a literal enum value, such as Direction.Up, specified as enumlit(\"Direction\", \"Up\").\n */\nfunction enumlit(name, prop) {\n return new TEnumLiteral(name, prop);\n}\nexports.enumlit = enumlit;\nvar TEnumLiteral = /** @class */ (function (_super) {\n __extends(TEnumLiteral, _super);\n function TEnumLiteral(enumName, prop) {\n var _this = _super.call(this) || this;\n _this.enumName = enumName;\n _this.prop = prop;\n _this._failMsg = \"is not \" + enumName + \".\" + prop;\n return _this;\n }\n TEnumLiteral.prototype.getChecker = function (suite, strict) {\n var _this = this;\n var ttype = getNamedType(suite, this.enumName);\n if (!(ttype instanceof TEnumType)) {\n throw new Error(\"Type \" + this.enumName + \" used in enumlit is not an enum type\");\n }\n var val = ttype.members[this.prop];\n if (!ttype.members.hasOwnProperty(this.prop)) {\n throw new Error(\"Unknown value \" + this.enumName + \".\" + this.prop + \" used in enumlit\");\n }\n return function (value, ctx) { return (value === val) ? true : ctx.fail(null, _this._failMsg, -1); };\n };\n return TEnumLiteral;\n}(TType));\nexports.TEnumLiteral = TEnumLiteral;\nfunction makeIfaceProps(props) {\n return Object.keys(props).map(function (name) { return makeIfaceProp(name, props[name]); });\n}\nfunction makeIfaceProp(name, prop) {\n return prop instanceof TOptional ?\n new TProp(name, prop.ttype, true) :\n new TProp(name, parseSpec(prop), false);\n}\n/**\n * Defines an interface. The first argument is an array of interfaces that it extends, and the\n * second is an array of properties.\n */\nfunction iface(bases, props) {\n return new TIface(bases, makeIfaceProps(props));\n}\nexports.iface = iface;\nvar TIface = /** @class */ (function (_super) {\n __extends(TIface, _super);\n function TIface(bases, props) {\n var _this = _super.call(this) || this;\n _this.bases = bases;\n _this.props = props;\n _this.propSet = new Set(props.map(function (p) { return p.name; }));\n return _this;\n }\n TIface.prototype.getChecker = function (suite, strict, allowedProps) {\n var _this = this;\n var baseCheckers = this.bases.map(function (b) { return getNamedType(suite, b).getChecker(suite, strict); });\n var propCheckers = this.props.map(function (prop) { return prop.ttype.getChecker(suite, strict); });\n var testCtx = new util_1.NoopContext();\n // Consider a prop required if it's not optional AND does not allow for undefined as a value.\n var isPropRequired = this.props.map(function (prop, i) {\n return !prop.isOpt && !propCheckers[i](undefined, testCtx);\n });\n var checker = function (value, ctx) {\n if (typeof value !== \"object\" || value === null) {\n return ctx.fail(null, \"is not an object\", 0);\n }\n for (var i = 0; i < baseCheckers.length; i++) {\n if (!baseCheckers[i](value, ctx)) {\n return false;\n }\n }\n for (var i = 0; i < propCheckers.length; i++) {\n var name_1 = _this.props[i].name;\n var v = value[name_1];\n if (v === undefined) {\n if (isPropRequired[i]) {\n return ctx.fail(name_1, \"is missing\", 1);\n }\n }\n else {\n var ok = propCheckers[i](v, ctx);\n if (!ok) {\n return ctx.fail(name_1, null, 1);\n }\n }\n }\n return true;\n };\n if (!strict) {\n return checker;\n }\n var propSet = this.propSet;\n if (allowedProps) {\n this.propSet.forEach(function (prop) { return allowedProps.add(prop); });\n propSet = allowedProps;\n }\n // In strict mode, check also for unknown enumerable properties.\n return function (value, ctx) {\n if (!checker(value, ctx)) {\n return false;\n }\n for (var prop in value) {\n if (!propSet.has(prop)) {\n return ctx.fail(prop, \"is extraneous\", 2);\n }\n }\n return true;\n };\n };\n return TIface;\n}(TType));\nexports.TIface = TIface;\n/**\n * Defines an optional property on an interface.\n */\nfunction opt(typeSpec) { return new TOptional(parseSpec(typeSpec)); }\nexports.opt = opt;\nvar TOptional = /** @class */ (function (_super) {\n __extends(TOptional, _super);\n function TOptional(ttype) {\n var _this = _super.call(this) || this;\n _this.ttype = ttype;\n return _this;\n }\n TOptional.prototype.getChecker = function (suite, strict) {\n var itemChecker = this.ttype.getChecker(suite, strict);\n return function (value, ctx) {\n return value === undefined || itemChecker(value, ctx);\n };\n };\n return TOptional;\n}(TType));\nexports.TOptional = TOptional;\n/**\n * Defines a property in an interface.\n */\nvar TProp = /** @class */ (function () {\n function TProp(name, ttype, isOpt) {\n this.name = name;\n this.ttype = ttype;\n this.isOpt = isOpt;\n }\n return TProp;\n}());\nexports.TProp = TProp;\n/**\n * Defines a function. The first argument declares the function's return type, the rest declare\n * its parameters.\n */\nfunction func(resultSpec) {\n var params = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n params[_i - 1] = arguments[_i];\n }\n return new TFunc(new TParamList(params), parseSpec(resultSpec));\n}\nexports.func = func;\nvar TFunc = /** @class */ (function (_super) {\n __extends(TFunc, _super);\n function TFunc(paramList, result) {\n var _this = _super.call(this) || this;\n _this.paramList = paramList;\n _this.result = result;\n return _this;\n }\n TFunc.prototype.getChecker = function (suite, strict) {\n return function (value, ctx) {\n return typeof value === \"function\" ? true : ctx.fail(null, \"is not a function\", 0);\n };\n };\n return TFunc;\n}(TType));\nexports.TFunc = TFunc;\n/**\n * Defines a function parameter.\n */\nfunction param(name, typeSpec, isOpt) {\n return new TParam(name, parseSpec(typeSpec), Boolean(isOpt));\n}\nexports.param = param;\nvar TParam = /** @class */ (function () {\n function TParam(name, ttype, isOpt) {\n this.name = name;\n this.ttype = ttype;\n this.isOpt = isOpt;\n }\n return TParam;\n}());\nexports.TParam = TParam;\n/**\n * Defines a function parameter list.\n */\nvar TParamList = /** @class */ (function (_super) {\n __extends(TParamList, _super);\n function TParamList(params) {\n var _this = _super.call(this) || this;\n _this.params = params;\n return _this;\n }\n TParamList.prototype.getChecker = function (suite, strict) {\n var _this = this;\n var itemCheckers = this.params.map(function (t) { return t.ttype.getChecker(suite, strict); });\n var testCtx = new util_1.NoopContext();\n var isParamRequired = this.params.map(function (param, i) {\n return !param.isOpt && !itemCheckers[i](undefined, testCtx);\n });\n var checker = function (value, ctx) {\n if (!Array.isArray(value)) {\n return ctx.fail(null, \"is not an array\", 0);\n }\n for (var i = 0; i < itemCheckers.length; i++) {\n var p = _this.params[i];\n if (value[i] === undefined) {\n if (isParamRequired[i]) {\n return ctx.fail(p.name, \"is missing\", 1);\n }\n }\n else {\n var ok = itemCheckers[i](value[i], ctx);\n if (!ok) {\n return ctx.fail(p.name, null, 1);\n }\n }\n }\n return true;\n };\n if (!strict) {\n return checker;\n }\n return function (value, ctx) {\n if (!checker(value, ctx)) {\n return false;\n }\n return value.length <= itemCheckers.length ? true :\n ctx.fail(itemCheckers.length, \"is extraneous\", 2);\n };\n };\n return TParamList;\n}(TType));\nexports.TParamList = TParamList;\n/**\n * Single TType implementation for all basic built-in types.\n */\nvar BasicType = /** @class */ (function (_super) {\n __extends(BasicType, _super);\n function BasicType(validator, message) {\n var _this = _super.call(this) || this;\n _this.validator = validator;\n _this.message = message;\n return _this;\n }\n BasicType.prototype.getChecker = function (suite, strict) {\n var _this = this;\n return function (value, ctx) { return _this.validator(value) ? true : ctx.fail(null, _this.message, 0); };\n };\n return BasicType;\n}(TType));\nexports.BasicType = BasicType;\n/**\n * Defines the suite of basic types.\n */\nexports.basicTypes = {\n any: new BasicType(function (v) { return true; }, \"is invalid\"),\n number: new BasicType(function (v) { return (typeof v === \"number\"); }, \"is not a number\"),\n object: new BasicType(function (v) { return (typeof v === \"object\" && v); }, \"is not an object\"),\n boolean: new BasicType(function (v) { return (typeof v === \"boolean\"); }, \"is not a boolean\"),\n string: new BasicType(function (v) { return (typeof v === \"string\"); }, \"is not a string\"),\n symbol: new BasicType(function (v) { return (typeof v === \"symbol\"); }, \"is not a symbol\"),\n void: new BasicType(function (v) { return (v == null); }, \"is not void\"),\n undefined: new BasicType(function (v) { return (v === undefined); }, \"is not undefined\"),\n null: new BasicType(function (v) { return (v === null); }, \"is not null\"),\n never: new BasicType(function (v) { return false; }, \"is unexpected\"),\n Date: new BasicType(getIsNativeChecker(\"[object Date]\"), \"is not a Date\"),\n RegExp: new BasicType(getIsNativeChecker(\"[object RegExp]\"), \"is not a RegExp\"),\n};\n// This approach for checking native object types mirrors that of lodash. Its advantage over\n// `isinstance` is that it can still return true for native objects created in different JS\n// execution environments.\nvar nativeToString = Object.prototype.toString;\nfunction getIsNativeChecker(tag) {\n return function (v) { return typeof v === \"object\" && v && nativeToString.call(v) === tag; };\n}\nif (typeof Buffer !== \"undefined\") {\n exports.basicTypes.Buffer = new BasicType(function (v) { return Buffer.isBuffer(v); }, \"is not a Buffer\");\n}\nvar _loop_1 = function (array_1) {\n exports.basicTypes[array_1.name] = new BasicType(function (v) { return (v instanceof array_1); }, \"is not a \" + array_1.name);\n};\n// Support typed arrays of various flavors\nfor (var _i = 0, _a = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n Int32Array, Uint32Array, Float32Array, Float64Array, ArrayBuffer]; _i < _a.length; _i++) {\n var array_1 = _a[_i];\n _loop_1(array_1);\n}\n","\"use strict\";\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Checker = exports.createCheckers = void 0;\nvar types_1 = require(\"./types\");\nvar util_1 = require(\"./util\");\n/**\n * Export functions used to define interfaces.\n */\nvar types_2 = require(\"./types\");\nObject.defineProperty(exports, \"TArray\", { enumerable: true, get: function () { return types_2.TArray; } });\nObject.defineProperty(exports, \"TEnumType\", { enumerable: true, get: function () { return types_2.TEnumType; } });\nObject.defineProperty(exports, \"TEnumLiteral\", { enumerable: true, get: function () { return types_2.TEnumLiteral; } });\nObject.defineProperty(exports, \"TFunc\", { enumerable: true, get: function () { return types_2.TFunc; } });\nObject.defineProperty(exports, \"TIface\", { enumerable: true, get: function () { return types_2.TIface; } });\nObject.defineProperty(exports, \"TLiteral\", { enumerable: true, get: function () { return types_2.TLiteral; } });\nObject.defineProperty(exports, \"TName\", { enumerable: true, get: function () { return types_2.TName; } });\nObject.defineProperty(exports, \"TOptional\", { enumerable: true, get: function () { return types_2.TOptional; } });\nObject.defineProperty(exports, \"TParam\", { enumerable: true, get: function () { return types_2.TParam; } });\nObject.defineProperty(exports, \"TParamList\", { enumerable: true, get: function () { return types_2.TParamList; } });\nObject.defineProperty(exports, \"TProp\", { enumerable: true, get: function () { return types_2.TProp; } });\nObject.defineProperty(exports, \"TTuple\", { enumerable: true, get: function () { return types_2.TTuple; } });\nObject.defineProperty(exports, \"TType\", { enumerable: true, get: function () { return types_2.TType; } });\nObject.defineProperty(exports, \"TUnion\", { enumerable: true, get: function () { return types_2.TUnion; } });\nObject.defineProperty(exports, \"TIntersection\", { enumerable: true, get: function () { return types_2.TIntersection; } });\nObject.defineProperty(exports, \"array\", { enumerable: true, get: function () { return types_2.array; } });\nObject.defineProperty(exports, \"enumlit\", { enumerable: true, get: function () { return types_2.enumlit; } });\nObject.defineProperty(exports, \"enumtype\", { enumerable: true, get: function () { return types_2.enumtype; } });\nObject.defineProperty(exports, \"func\", { enumerable: true, get: function () { return types_2.func; } });\nObject.defineProperty(exports, \"iface\", { enumerable: true, get: function () { return types_2.iface; } });\nObject.defineProperty(exports, \"lit\", { enumerable: true, get: function () { return types_2.lit; } });\nObject.defineProperty(exports, \"name\", { enumerable: true, get: function () { return types_2.name; } });\nObject.defineProperty(exports, \"opt\", { enumerable: true, get: function () { return types_2.opt; } });\nObject.defineProperty(exports, \"param\", { enumerable: true, get: function () { return types_2.param; } });\nObject.defineProperty(exports, \"tuple\", { enumerable: true, get: function () { return types_2.tuple; } });\nObject.defineProperty(exports, \"union\", { enumerable: true, get: function () { return types_2.union; } });\nObject.defineProperty(exports, \"intersection\", { enumerable: true, get: function () { return types_2.intersection; } });\nObject.defineProperty(exports, \"BasicType\", { enumerable: true, get: function () { return types_2.BasicType; } });\nvar util_2 = require(\"./util\");\nObject.defineProperty(exports, \"VError\", { enumerable: true, get: function () { return util_2.VError; } });\n/**\n * Takes one of more type suites (e.g. a module generated by `ts-interface-builder`), and combines\n * them into a suite of interface checkers. If a type is used by name, that name should be present\n * among the passed-in type suites.\n *\n * The returned object maps type names to Checker objects.\n */\nfunction createCheckers() {\n var typeSuite = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n typeSuite[_i] = arguments[_i];\n }\n var fullSuite = Object.assign.apply(Object, __spreadArrays([{}, types_1.basicTypes], typeSuite));\n var checkers = {};\n for (var _a = 0, typeSuite_1 = typeSuite; _a < typeSuite_1.length; _a++) {\n var suite_1 = typeSuite_1[_a];\n for (var _b = 0, _c = Object.keys(suite_1); _b < _c.length; _b++) {\n var name = _c[_b];\n checkers[name] = new Checker(fullSuite, suite_1[name]);\n }\n }\n return checkers;\n}\nexports.createCheckers = createCheckers;\n/**\n * Checker implements validation of objects, and also includes accessors to validate method calls.\n * Checkers should be created using `createCheckers()`.\n */\nvar Checker = /** @class */ (function () {\n // Create checkers by using `createCheckers()` function.\n function Checker(suite, ttype, _path) {\n if (_path === void 0) { _path = 'value'; }\n this.suite = suite;\n this.ttype = ttype;\n this._path = _path;\n this.props = new Map();\n if (ttype instanceof types_1.TIface) {\n for (var _i = 0, _a = ttype.props; _i < _a.length; _i++) {\n var p = _a[_i];\n this.props.set(p.name, p.ttype);\n }\n }\n this.checkerPlain = this.ttype.getChecker(suite, false);\n this.checkerStrict = this.ttype.getChecker(suite, true);\n }\n /**\n * Set the path to report in errors, instead of the default \"value\". (E.g. if the Checker is for\n * a \"person\" interface, set path to \"person\" to report e.g. \"person.name is not a string\".)\n */\n Checker.prototype.setReportedPath = function (path) {\n this._path = path;\n };\n /**\n * Check that the given value satisfies this checker's type, or throw Error.\n */\n Checker.prototype.check = function (value) { return this._doCheck(this.checkerPlain, value); };\n /**\n * A fast check for whether or not the given value satisfies this Checker's type. This returns\n * true or false, does not produce an error message, and is fast both on success and on failure.\n */\n Checker.prototype.test = function (value) {\n return this.checkerPlain(value, new util_1.NoopContext());\n };\n /**\n * Returns an error object describing the errors if the given value does not satisfy this\n * Checker's type, or null if it does.\n */\n Checker.prototype.validate = function (value) {\n return this._doValidate(this.checkerPlain, value);\n };\n /**\n * Check that the given value satisfies this checker's type strictly. This checks that objects\n * and tuples have no extra members. Note that this prevents backward compatibility, so usually\n * a plain check() is more appropriate.\n */\n Checker.prototype.strictCheck = function (value) { return this._doCheck(this.checkerStrict, value); };\n /**\n * A fast strict check for whether or not the given value satisfies this Checker's type. Returns\n * true or false, does not produce an error message, and is fast both on success and on failure.\n */\n Checker.prototype.strictTest = function (value) {\n return this.checkerStrict(value, new util_1.NoopContext());\n };\n /**\n * Returns an error object describing the errors if the given value does not satisfy this\n * Checker's type strictly, or null if it does.\n */\n Checker.prototype.strictValidate = function (value) {\n return this._doValidate(this.checkerStrict, value);\n };\n /**\n * If this checker is for an interface, returns a Checker for the type required for the given\n * property of this interface.\n */\n Checker.prototype.getProp = function (prop) {\n var ttype = this.props.get(prop);\n if (!ttype) {\n throw new Error(\"Type has no property \" + prop);\n }\n return new Checker(this.suite, ttype, this._path + \".\" + prop);\n };\n /**\n * If this checker is for an interface, returns a Checker for the argument-list required to call\n * the given method of this interface. E.g. if this Checker is for the interface:\n * interface Foo {\n * find(s: string, pos?: number): number;\n * }\n * Then methodArgs(\"find\").check(...) will succeed for [\"foo\"] and [\"foo\", 3], but not for [17].\n */\n Checker.prototype.methodArgs = function (methodName) {\n var tfunc = this._getMethod(methodName);\n return new Checker(this.suite, tfunc.paramList);\n };\n /**\n * If this checker is for an interface, returns a Checker for the return value of the given\n * method of this interface.\n */\n Checker.prototype.methodResult = function (methodName) {\n var tfunc = this._getMethod(methodName);\n return new Checker(this.suite, tfunc.result);\n };\n /**\n * If this checker is for a function, returns a Checker for its argument-list.\n */\n Checker.prototype.getArgs = function () {\n if (!(this.ttype instanceof types_1.TFunc)) {\n throw new Error(\"getArgs() applied to non-function\");\n }\n return new Checker(this.suite, this.ttype.paramList);\n };\n /**\n * If this checker is for a function, returns a Checker for its result.\n */\n Checker.prototype.getResult = function () {\n if (!(this.ttype instanceof types_1.TFunc)) {\n throw new Error(\"getResult() applied to non-function\");\n }\n return new Checker(this.suite, this.ttype.result);\n };\n /**\n * Return the type for which this is a checker.\n */\n Checker.prototype.getType = function () {\n return this.ttype;\n };\n /**\n * Actual implementation of check() and strictCheck().\n */\n Checker.prototype._doCheck = function (checkerFunc, value) {\n var noopCtx = new util_1.NoopContext();\n if (!checkerFunc(value, noopCtx)) {\n var detailCtx = new util_1.DetailContext();\n checkerFunc(value, detailCtx);\n throw detailCtx.getError(this._path);\n }\n };\n Checker.prototype._doValidate = function (checkerFunc, value) {\n var noopCtx = new util_1.NoopContext();\n if (checkerFunc(value, noopCtx)) {\n return null;\n }\n var detailCtx = new util_1.DetailContext();\n checkerFunc(value, detailCtx);\n return detailCtx.getErrorDetail(this._path);\n };\n Checker.prototype._getMethod = function (methodName) {\n var ttype = this.props.get(methodName);\n if (!ttype) {\n throw new Error(\"Type has no property \" + methodName);\n }\n if (!(ttype instanceof types_1.TFunc)) {\n throw new Error(\"Property \" + methodName + \" is not a method\");\n }\n return ttype;\n };\n return Checker;\n}());\nexports.Checker = Checker;\n","/**\n * This module was automatically generated by `ts-interface-builder`\n */\nimport * as t from \"ts-interface-checker\";\n// tslint:disable:object-literal-key-quotes\n\nexport const Transform = t.union(\n t.lit(\"jsx\"),\n t.lit(\"typescript\"),\n t.lit(\"flow\"),\n t.lit(\"imports\"),\n t.lit(\"react-hot-loader\"),\n t.lit(\"jest\"),\n);\n\nexport const SourceMapOptions = t.iface([], {\n compiledFilename: \"string\",\n});\n\nexport const Options = t.iface([], {\n transforms: t.array(\"Transform\"),\n disableESTransforms: t.opt(\"boolean\"),\n jsxRuntime: t.opt(t.union(t.lit(\"classic\"), t.lit(\"automatic\"), t.lit(\"preserve\"))),\n production: t.opt(\"boolean\"),\n jsxImportSource: t.opt(\"string\"),\n jsxPragma: t.opt(\"string\"),\n jsxFragmentPragma: t.opt(\"string\"),\n keepUnusedImports: t.opt(\"boolean\"),\n preserveDynamicImport: t.opt(\"boolean\"),\n injectCreateRequireForImportRequire: t.opt(\"boolean\"),\n enableLegacyTypeScriptModuleInterop: t.opt(\"boolean\"),\n enableLegacyBabel5ModuleInterop: t.opt(\"boolean\"),\n sourceMapOptions: t.opt(\"SourceMapOptions\"),\n filePath: t.opt(\"string\"),\n});\n\nconst exportedTypeSuite = {\n Transform,\n SourceMapOptions,\n Options,\n};\nexport default exportedTypeSuite;\n","import {createCheckers} from \"ts-interface-checker\";\n\nimport OptionsGenTypes from \"./Options-gen-types\";\n\nconst {Options: OptionsChecker} = createCheckers(OptionsGenTypes);\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexport function validateOptions(options) {\n OptionsChecker.strictCheck(options);\n}\n","import {flowParseAssignableListItemTypes} from \"../plugins/flow\";\nimport {tsParseAssignableListItemTypes, tsParseModifiers} from \"../plugins/typescript\";\nimport {\n eat,\n IdentifierRole,\n match,\n next,\n popTypeContext,\n pushTypeContext,\n} from \"../tokenizer/index\";\nimport {ContextualKeyword} from \"../tokenizer/keywords\";\nimport {TokenType, TokenType as tt} from \"../tokenizer/types\";\nimport {isFlowEnabled, isTypeScriptEnabled, state} from \"./base\";\nimport {parseIdentifier, parseMaybeAssign, parseObj} from \"./expression\";\nimport {expect, unexpected} from \"./util\";\n\nexport function parseSpread() {\n next();\n parseMaybeAssign(false);\n}\n\nexport function parseRest(isBlockScope) {\n next();\n parseBindingAtom(isBlockScope);\n}\n\nexport function parseBindingIdentifier(isBlockScope) {\n parseIdentifier();\n markPriorBindingIdentifier(isBlockScope);\n}\n\nexport function parseImportedIdentifier() {\n parseIdentifier();\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration;\n}\n\nexport function markPriorBindingIdentifier(isBlockScope) {\n let identifierRole;\n if (state.scopeDepth === 0) {\n identifierRole = IdentifierRole.TopLevelDeclaration;\n } else if (isBlockScope) {\n identifierRole = IdentifierRole.BlockScopedDeclaration;\n } else {\n identifierRole = IdentifierRole.FunctionScopedDeclaration;\n }\n state.tokens[state.tokens.length - 1].identifierRole = identifierRole;\n}\n\n// Parses lvalue (assignable) atom.\nexport function parseBindingAtom(isBlockScope) {\n switch (state.type) {\n case tt._this: {\n // In TypeScript, \"this\" may be the name of a parameter, so allow it.\n const oldIsType = pushTypeContext(0);\n next();\n popTypeContext(oldIsType);\n return;\n }\n\n case tt._yield:\n case tt.name: {\n state.type = tt.name;\n parseBindingIdentifier(isBlockScope);\n return;\n }\n\n case tt.bracketL: {\n next();\n parseBindingList(tt.bracketR, isBlockScope, true /* allowEmpty */);\n return;\n }\n\n case tt.braceL:\n parseObj(true, isBlockScope);\n return;\n\n default:\n unexpected();\n }\n}\n\nexport function parseBindingList(\n close,\n isBlockScope,\n allowEmpty = false,\n allowModifiers = false,\n contextId = 0,\n) {\n let first = true;\n\n let hasRemovedComma = false;\n const firstItemTokenIndex = state.tokens.length;\n\n while (!eat(close) && !state.error) {\n if (first) {\n first = false;\n } else {\n expect(tt.comma);\n state.tokens[state.tokens.length - 1].contextId = contextId;\n // After a \"this\" type in TypeScript, we need to set the following comma (if any) to also be\n // a type token so that it will be removed.\n if (!hasRemovedComma && state.tokens[firstItemTokenIndex].isType) {\n state.tokens[state.tokens.length - 1].isType = true;\n hasRemovedComma = true;\n }\n }\n if (allowEmpty && match(tt.comma)) {\n // Empty item; nothing further to parse for this item.\n } else if (eat(close)) {\n break;\n } else if (match(tt.ellipsis)) {\n parseRest(isBlockScope);\n parseAssignableListItemTypes();\n // Support rest element trailing commas allowed by TypeScript <2.9.\n eat(TokenType.comma);\n expect(close);\n break;\n } else {\n parseAssignableListItem(allowModifiers, isBlockScope);\n }\n }\n}\n\nfunction parseAssignableListItem(allowModifiers, isBlockScope) {\n if (allowModifiers) {\n tsParseModifiers([\n ContextualKeyword._public,\n ContextualKeyword._protected,\n ContextualKeyword._private,\n ContextualKeyword._readonly,\n ContextualKeyword._override,\n ]);\n }\n\n parseMaybeDefault(isBlockScope);\n parseAssignableListItemTypes();\n parseMaybeDefault(isBlockScope, true /* leftAlreadyParsed */);\n}\n\nfunction parseAssignableListItemTypes() {\n if (isFlowEnabled) {\n flowParseAssignableListItemTypes();\n } else if (isTypeScriptEnabled) {\n tsParseAssignableListItemTypes();\n }\n}\n\n// Parses assignment pattern around given atom if possible.\nexport function parseMaybeDefault(isBlockScope, leftAlreadyParsed = false) {\n if (!leftAlreadyParsed) {\n parseBindingAtom(isBlockScope);\n }\n if (!eat(tt.eq)) {\n return;\n }\n const eqIndex = state.tokens.length - 1;\n parseMaybeAssign();\n state.tokens[eqIndex].rhsEndIndex = state.tokens.length;\n}\n","import {\n eat,\n finishToken,\n IdentifierRole,\n lookaheadType,\n lookaheadTypeAndKeyword,\n match,\n next,\n nextTemplateToken,\n popTypeContext,\n pushTypeContext,\n rescan_gt,\n} from \"../tokenizer/index\";\nimport {ContextualKeyword} from \"../tokenizer/keywords\";\nimport {TokenType, TokenType as tt} from \"../tokenizer/types\";\nimport {isJSXEnabled, state} from \"../traverser/base\";\nimport {\n atPossibleAsync,\n baseParseMaybeAssign,\n baseParseSubscript,\n parseCallExpressionArguments,\n parseExprAtom,\n parseExpression,\n parseFunctionBody,\n parseIdentifier,\n parseLiteral,\n parseMaybeAssign,\n parseMaybeUnary,\n parsePropertyName,\n parseTemplate,\n\n} from \"../traverser/expression\";\nimport {parseBindingIdentifier, parseBindingList, parseImportedIdentifier} from \"../traverser/lval\";\nimport {\n baseParseMaybeDecoratorArguments,\n parseBlockBody,\n parseClass,\n parseFunction,\n parseFunctionParams,\n parseStatement,\n parseVarStatement,\n} from \"../traverser/statement\";\nimport {\n canInsertSemicolon,\n eatContextual,\n expect,\n expectContextual,\n hasPrecedingLineBreak,\n isContextual,\n isLineTerminator,\n isLookaheadContextual,\n semicolon,\n unexpected,\n} from \"../traverser/util\";\nimport {nextJSXTagToken} from \"./jsx\";\n\nfunction tsIsIdentifier() {\n // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n // See https://github.com/Microsoft/TypeScript/issues/15008\n return match(tt.name);\n}\n\nfunction isLiteralPropertyName() {\n return (\n match(tt.name) ||\n Boolean(state.type & TokenType.IS_KEYWORD) ||\n match(tt.string) ||\n match(tt.num) ||\n match(tt.bigint) ||\n match(tt.decimal)\n );\n}\n\nfunction tsNextTokenCanFollowModifier() {\n // Note: TypeScript's implementation is much more complicated because\n // more things are considered modifiers there.\n // This implementation only handles modifiers not handled by babylon itself. And \"static\".\n // TODO: Would be nice to avoid lookahead. Want a hasLineBreakUpNext() method...\n const snapshot = state.snapshot();\n\n next();\n const canFollowModifier =\n (match(tt.bracketL) ||\n match(tt.braceL) ||\n match(tt.star) ||\n match(tt.ellipsis) ||\n match(tt.hash) ||\n isLiteralPropertyName()) &&\n !hasPrecedingLineBreak();\n\n if (canFollowModifier) {\n return true;\n } else {\n state.restoreFromSnapshot(snapshot);\n return false;\n }\n}\n\nexport function tsParseModifiers(allowedModifiers) {\n while (true) {\n const modifier = tsParseModifier(allowedModifiers);\n if (modifier === null) {\n break;\n }\n }\n}\n\n/** Parses a modifier matching one the given modifier names. */\nexport function tsParseModifier(\n allowedModifiers,\n) {\n if (!match(tt.name)) {\n return null;\n }\n\n const modifier = state.contextualKeyword;\n if (allowedModifiers.indexOf(modifier) !== -1 && tsNextTokenCanFollowModifier()) {\n switch (modifier) {\n case ContextualKeyword._readonly:\n state.tokens[state.tokens.length - 1].type = tt._readonly;\n break;\n case ContextualKeyword._abstract:\n state.tokens[state.tokens.length - 1].type = tt._abstract;\n break;\n case ContextualKeyword._static:\n state.tokens[state.tokens.length - 1].type = tt._static;\n break;\n case ContextualKeyword._public:\n state.tokens[state.tokens.length - 1].type = tt._public;\n break;\n case ContextualKeyword._private:\n state.tokens[state.tokens.length - 1].type = tt._private;\n break;\n case ContextualKeyword._protected:\n state.tokens[state.tokens.length - 1].type = tt._protected;\n break;\n case ContextualKeyword._override:\n state.tokens[state.tokens.length - 1].type = tt._override;\n break;\n case ContextualKeyword._declare:\n state.tokens[state.tokens.length - 1].type = tt._declare;\n break;\n default:\n break;\n }\n return modifier;\n }\n return null;\n}\n\nfunction tsParseEntityName() {\n parseIdentifier();\n while (eat(tt.dot)) {\n parseIdentifier();\n }\n}\n\nfunction tsParseTypeReference() {\n tsParseEntityName();\n if (!hasPrecedingLineBreak() && match(tt.lessThan)) {\n tsParseTypeArguments();\n }\n}\n\nfunction tsParseThisTypePredicate() {\n next();\n tsParseTypeAnnotation();\n}\n\nfunction tsParseThisTypeNode() {\n next();\n}\n\nfunction tsParseTypeQuery() {\n expect(tt._typeof);\n if (match(tt._import)) {\n tsParseImportType();\n } else {\n tsParseEntityName();\n }\n if (!hasPrecedingLineBreak() && match(tt.lessThan)) {\n tsParseTypeArguments();\n }\n}\n\nfunction tsParseImportType() {\n expect(tt._import);\n expect(tt.parenL);\n expect(tt.string);\n expect(tt.parenR);\n if (eat(tt.dot)) {\n tsParseEntityName();\n }\n if (match(tt.lessThan)) {\n tsParseTypeArguments();\n }\n}\n\nfunction tsParseTypeParameter() {\n eat(tt._const);\n const hadIn = eat(tt._in);\n const hadOut = eatContextual(ContextualKeyword._out);\n eat(tt._const);\n if ((hadIn || hadOut) && !match(tt.name)) {\n // The \"in\" or \"out\" keyword must have actually been the type parameter\n // name, so set it as the name.\n state.tokens[state.tokens.length - 1].type = tt.name;\n } else {\n parseIdentifier();\n }\n\n if (eat(tt._extends)) {\n tsParseType();\n }\n if (eat(tt.eq)) {\n tsParseType();\n }\n}\n\nexport function tsTryParseTypeParameters() {\n if (match(tt.lessThan)) {\n tsParseTypeParameters();\n }\n}\n\nfunction tsParseTypeParameters() {\n const oldIsType = pushTypeContext(0);\n if (match(tt.lessThan) || match(tt.typeParameterStart)) {\n next();\n } else {\n unexpected();\n }\n\n while (!eat(tt.greaterThan) && !state.error) {\n tsParseTypeParameter();\n eat(tt.comma);\n }\n popTypeContext(oldIsType);\n}\n\n// Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n// but here it's always false, because this is only used for types.\nfunction tsFillSignature(returnToken) {\n // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n const returnTokenRequired = returnToken === tt.arrow;\n tsTryParseTypeParameters();\n expect(tt.parenL);\n // Create a scope even though we're doing type parsing so we don't accidentally\n // treat params as top-level bindings.\n state.scopeDepth++;\n tsParseBindingListForSignature(false /* isBlockScope */);\n state.scopeDepth--;\n if (returnTokenRequired) {\n tsParseTypeOrTypePredicateAnnotation(returnToken);\n } else if (match(returnToken)) {\n tsParseTypeOrTypePredicateAnnotation(returnToken);\n }\n}\n\nfunction tsParseBindingListForSignature(isBlockScope) {\n parseBindingList(tt.parenR, isBlockScope);\n}\n\nfunction tsParseTypeMemberSemicolon() {\n if (!eat(tt.comma)) {\n semicolon();\n }\n}\n\nfunction tsParseSignatureMember() {\n tsFillSignature(tt.colon);\n tsParseTypeMemberSemicolon();\n}\n\nfunction tsIsUnambiguouslyIndexSignature() {\n const snapshot = state.snapshot();\n next(); // Skip '{'\n const isIndexSignature = eat(tt.name) && match(tt.colon);\n state.restoreFromSnapshot(snapshot);\n return isIndexSignature;\n}\n\nfunction tsTryParseIndexSignature() {\n if (!(match(tt.bracketL) && tsIsUnambiguouslyIndexSignature())) {\n return false;\n }\n\n const oldIsType = pushTypeContext(0);\n\n expect(tt.bracketL);\n parseIdentifier();\n tsParseTypeAnnotation();\n expect(tt.bracketR);\n\n tsTryParseTypeAnnotation();\n tsParseTypeMemberSemicolon();\n\n popTypeContext(oldIsType);\n return true;\n}\n\nfunction tsParsePropertyOrMethodSignature(isReadonly) {\n eat(tt.question);\n\n if (!isReadonly && (match(tt.parenL) || match(tt.lessThan))) {\n tsFillSignature(tt.colon);\n tsParseTypeMemberSemicolon();\n } else {\n tsTryParseTypeAnnotation();\n tsParseTypeMemberSemicolon();\n }\n}\n\nfunction tsParseTypeMember() {\n if (match(tt.parenL) || match(tt.lessThan)) {\n // call signature\n tsParseSignatureMember();\n return;\n }\n if (match(tt._new)) {\n next();\n if (match(tt.parenL) || match(tt.lessThan)) {\n // constructor signature\n tsParseSignatureMember();\n } else {\n tsParsePropertyOrMethodSignature(false);\n }\n return;\n }\n const readonly = !!tsParseModifier([ContextualKeyword._readonly]);\n\n const found = tsTryParseIndexSignature();\n if (found) {\n return;\n }\n if (\n (isContextual(ContextualKeyword._get) || isContextual(ContextualKeyword._set)) &&\n tsNextTokenCanFollowModifier()\n ) {\n // This is a getter/setter on a type. The tsNextTokenCanFollowModifier\n // function already called next() for us, so continue parsing the name.\n }\n parsePropertyName(-1 /* Types don't need context IDs. */);\n tsParsePropertyOrMethodSignature(readonly);\n}\n\nfunction tsParseTypeLiteral() {\n tsParseObjectTypeMembers();\n}\n\nfunction tsParseObjectTypeMembers() {\n expect(tt.braceL);\n while (!eat(tt.braceR) && !state.error) {\n tsParseTypeMember();\n }\n}\n\nfunction tsLookaheadIsStartOfMappedType() {\n const snapshot = state.snapshot();\n const isStartOfMappedType = tsIsStartOfMappedType();\n state.restoreFromSnapshot(snapshot);\n return isStartOfMappedType;\n}\n\nfunction tsIsStartOfMappedType() {\n next();\n if (eat(tt.plus) || eat(tt.minus)) {\n return isContextual(ContextualKeyword._readonly);\n }\n if (isContextual(ContextualKeyword._readonly)) {\n next();\n }\n if (!match(tt.bracketL)) {\n return false;\n }\n next();\n if (!tsIsIdentifier()) {\n return false;\n }\n next();\n return match(tt._in);\n}\n\nfunction tsParseMappedTypeParameter() {\n parseIdentifier();\n expect(tt._in);\n tsParseType();\n}\n\nfunction tsParseMappedType() {\n expect(tt.braceL);\n if (match(tt.plus) || match(tt.minus)) {\n next();\n expectContextual(ContextualKeyword._readonly);\n } else {\n eatContextual(ContextualKeyword._readonly);\n }\n expect(tt.bracketL);\n tsParseMappedTypeParameter();\n if (eatContextual(ContextualKeyword._as)) {\n tsParseType();\n }\n expect(tt.bracketR);\n if (match(tt.plus) || match(tt.minus)) {\n next();\n expect(tt.question);\n } else {\n eat(tt.question);\n }\n tsTryParseType();\n semicolon();\n expect(tt.braceR);\n}\n\nfunction tsParseTupleType() {\n expect(tt.bracketL);\n while (!eat(tt.bracketR) && !state.error) {\n // Do not validate presence of either none or only labeled elements\n tsParseTupleElementType();\n eat(tt.comma);\n }\n}\n\nfunction tsParseTupleElementType() {\n // parses `...TsType[]`\n if (eat(tt.ellipsis)) {\n tsParseType();\n } else {\n // parses `TsType?`\n tsParseType();\n eat(tt.question);\n }\n\n // The type we parsed above was actually a label\n if (eat(tt.colon)) {\n // Labeled tuple types must affix the label with `...` or `?`, so no need to handle those here\n tsParseType();\n }\n}\n\nfunction tsParseParenthesizedType() {\n expect(tt.parenL);\n tsParseType();\n expect(tt.parenR);\n}\n\nfunction tsParseTemplateLiteralType() {\n // Finish `, read quasi\n nextTemplateToken();\n // Finish quasi, read ${\n nextTemplateToken();\n while (!match(tt.backQuote) && !state.error) {\n expect(tt.dollarBraceL);\n tsParseType();\n // Finish }, read quasi\n nextTemplateToken();\n // Finish quasi, read either ${ or `\n nextTemplateToken();\n }\n next();\n}\n\nvar FunctionType; (function (FunctionType) {\n const TSFunctionType = 0; FunctionType[FunctionType[\"TSFunctionType\"] = TSFunctionType] = \"TSFunctionType\";\n const TSConstructorType = TSFunctionType + 1; FunctionType[FunctionType[\"TSConstructorType\"] = TSConstructorType] = \"TSConstructorType\";\n const TSAbstractConstructorType = TSConstructorType + 1; FunctionType[FunctionType[\"TSAbstractConstructorType\"] = TSAbstractConstructorType] = \"TSAbstractConstructorType\";\n})(FunctionType || (FunctionType = {}));\n\nfunction tsParseFunctionOrConstructorType(type) {\n if (type === FunctionType.TSAbstractConstructorType) {\n expectContextual(ContextualKeyword._abstract);\n }\n if (type === FunctionType.TSConstructorType || type === FunctionType.TSAbstractConstructorType) {\n expect(tt._new);\n }\n const oldInDisallowConditionalTypesContext = state.inDisallowConditionalTypesContext;\n state.inDisallowConditionalTypesContext = false;\n tsFillSignature(tt.arrow);\n state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;\n}\n\nfunction tsParseNonArrayType() {\n switch (state.type) {\n case tt.name:\n tsParseTypeReference();\n return;\n case tt._void:\n case tt._null:\n next();\n return;\n case tt.string:\n case tt.num:\n case tt.bigint:\n case tt.decimal:\n case tt._true:\n case tt._false:\n parseLiteral();\n return;\n case tt.minus:\n next();\n parseLiteral();\n return;\n case tt._this: {\n tsParseThisTypeNode();\n if (isContextual(ContextualKeyword._is) && !hasPrecedingLineBreak()) {\n tsParseThisTypePredicate();\n }\n return;\n }\n case tt._typeof:\n tsParseTypeQuery();\n return;\n case tt._import:\n tsParseImportType();\n return;\n case tt.braceL:\n if (tsLookaheadIsStartOfMappedType()) {\n tsParseMappedType();\n } else {\n tsParseTypeLiteral();\n }\n return;\n case tt.bracketL:\n tsParseTupleType();\n return;\n case tt.parenL:\n tsParseParenthesizedType();\n return;\n case tt.backQuote:\n tsParseTemplateLiteralType();\n return;\n default:\n if (state.type & TokenType.IS_KEYWORD) {\n next();\n state.tokens[state.tokens.length - 1].type = tt.name;\n return;\n }\n break;\n }\n\n unexpected();\n}\n\nfunction tsParseArrayTypeOrHigher() {\n tsParseNonArrayType();\n while (!hasPrecedingLineBreak() && eat(tt.bracketL)) {\n if (!eat(tt.bracketR)) {\n // If we hit ] immediately, this is an array type, otherwise it's an indexed access type.\n tsParseType();\n expect(tt.bracketR);\n }\n }\n}\n\nfunction tsParseInferType() {\n expectContextual(ContextualKeyword._infer);\n parseIdentifier();\n if (match(tt._extends)) {\n // Infer type constraints introduce an ambiguity about whether the \"extends\"\n // is a constraint for this infer type or is another conditional type.\n const snapshot = state.snapshot();\n expect(tt._extends);\n const oldInDisallowConditionalTypesContext = state.inDisallowConditionalTypesContext;\n state.inDisallowConditionalTypesContext = true;\n tsParseType();\n state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;\n if (state.error || (!state.inDisallowConditionalTypesContext && match(tt.question))) {\n state.restoreFromSnapshot(snapshot);\n }\n }\n}\n\nfunction tsParseTypeOperatorOrHigher() {\n if (\n isContextual(ContextualKeyword._keyof) ||\n isContextual(ContextualKeyword._unique) ||\n isContextual(ContextualKeyword._readonly)\n ) {\n next();\n tsParseTypeOperatorOrHigher();\n } else if (isContextual(ContextualKeyword._infer)) {\n tsParseInferType();\n } else {\n const oldInDisallowConditionalTypesContext = state.inDisallowConditionalTypesContext;\n state.inDisallowConditionalTypesContext = false;\n tsParseArrayTypeOrHigher();\n state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;\n }\n}\n\nfunction tsParseIntersectionTypeOrHigher() {\n eat(tt.bitwiseAND);\n tsParseTypeOperatorOrHigher();\n if (match(tt.bitwiseAND)) {\n while (eat(tt.bitwiseAND)) {\n tsParseTypeOperatorOrHigher();\n }\n }\n}\n\nfunction tsParseUnionTypeOrHigher() {\n eat(tt.bitwiseOR);\n tsParseIntersectionTypeOrHigher();\n if (match(tt.bitwiseOR)) {\n while (eat(tt.bitwiseOR)) {\n tsParseIntersectionTypeOrHigher();\n }\n }\n}\n\nfunction tsIsStartOfFunctionType() {\n if (match(tt.lessThan)) {\n return true;\n }\n return match(tt.parenL) && tsLookaheadIsUnambiguouslyStartOfFunctionType();\n}\n\nfunction tsSkipParameterStart() {\n if (match(tt.name) || match(tt._this)) {\n next();\n return true;\n }\n // If this is a possible array/object destructure, walk to the matching bracket/brace.\n // The next token after will tell us definitively whether this is a function param.\n if (match(tt.braceL) || match(tt.bracketL)) {\n let depth = 1;\n next();\n while (depth > 0 && !state.error) {\n if (match(tt.braceL) || match(tt.bracketL)) {\n depth++;\n } else if (match(tt.braceR) || match(tt.bracketR)) {\n depth--;\n }\n next();\n }\n return true;\n }\n return false;\n}\n\nfunction tsLookaheadIsUnambiguouslyStartOfFunctionType() {\n const snapshot = state.snapshot();\n const isUnambiguouslyStartOfFunctionType = tsIsUnambiguouslyStartOfFunctionType();\n state.restoreFromSnapshot(snapshot);\n return isUnambiguouslyStartOfFunctionType;\n}\n\nfunction tsIsUnambiguouslyStartOfFunctionType() {\n next();\n if (match(tt.parenR) || match(tt.ellipsis)) {\n // ( )\n // ( ...\n return true;\n }\n if (tsSkipParameterStart()) {\n if (match(tt.colon) || match(tt.comma) || match(tt.question) || match(tt.eq)) {\n // ( xxx :\n // ( xxx ,\n // ( xxx ?\n // ( xxx =\n return true;\n }\n if (match(tt.parenR)) {\n next();\n if (match(tt.arrow)) {\n // ( xxx ) =>\n return true;\n }\n }\n }\n return false;\n}\n\nfunction tsParseTypeOrTypePredicateAnnotation(returnToken) {\n const oldIsType = pushTypeContext(0);\n expect(returnToken);\n const finishedReturn = tsParseTypePredicateOrAssertsPrefix();\n if (!finishedReturn) {\n tsParseType();\n }\n popTypeContext(oldIsType);\n}\n\nfunction tsTryParseTypeOrTypePredicateAnnotation() {\n if (match(tt.colon)) {\n tsParseTypeOrTypePredicateAnnotation(tt.colon);\n }\n}\n\nexport function tsTryParseTypeAnnotation() {\n if (match(tt.colon)) {\n tsParseTypeAnnotation();\n }\n}\n\nfunction tsTryParseType() {\n if (eat(tt.colon)) {\n tsParseType();\n }\n}\n\n/**\n * Detect a few special return syntax cases: `x is T`, `asserts x`, `asserts x is T`,\n * `asserts this is T`.\n *\n * Returns true if we parsed the return type, false if there's still a type to be parsed.\n */\nfunction tsParseTypePredicateOrAssertsPrefix() {\n const snapshot = state.snapshot();\n if (isContextual(ContextualKeyword._asserts)) {\n // Normally this is `asserts x is T`, but at this point, it might be `asserts is T` (a user-\n // defined type guard on the `asserts` variable) or just a type called `asserts`.\n next();\n if (eatContextual(ContextualKeyword._is)) {\n // If we see `asserts is`, then this must be of the form `asserts is T`, since\n // `asserts is is T` isn't valid.\n tsParseType();\n return true;\n } else if (tsIsIdentifier() || match(tt._this)) {\n next();\n if (eatContextual(ContextualKeyword._is)) {\n // If we see `is`, then this is `asserts x is T`. Otherwise, it's `asserts x`.\n tsParseType();\n }\n return true;\n } else {\n // Regular type, so bail out and start type parsing from scratch.\n state.restoreFromSnapshot(snapshot);\n return false;\n }\n } else if (tsIsIdentifier() || match(tt._this)) {\n // This is a regular identifier, which may or may not have \"is\" after it.\n next();\n if (isContextual(ContextualKeyword._is) && !hasPrecedingLineBreak()) {\n next();\n tsParseType();\n return true;\n } else {\n // Regular type, so bail out and start type parsing from scratch.\n state.restoreFromSnapshot(snapshot);\n return false;\n }\n }\n return false;\n}\n\nexport function tsParseTypeAnnotation() {\n const oldIsType = pushTypeContext(0);\n expect(tt.colon);\n tsParseType();\n popTypeContext(oldIsType);\n}\n\nexport function tsParseType() {\n tsParseNonConditionalType();\n if (state.inDisallowConditionalTypesContext || hasPrecedingLineBreak() || !eat(tt._extends)) {\n return;\n }\n // extends type\n const oldInDisallowConditionalTypesContext = state.inDisallowConditionalTypesContext;\n state.inDisallowConditionalTypesContext = true;\n tsParseNonConditionalType();\n state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;\n\n expect(tt.question);\n // true type\n tsParseType();\n expect(tt.colon);\n // false type\n tsParseType();\n}\n\nfunction isAbstractConstructorSignature() {\n return isContextual(ContextualKeyword._abstract) && lookaheadType() === tt._new;\n}\n\nexport function tsParseNonConditionalType() {\n if (tsIsStartOfFunctionType()) {\n tsParseFunctionOrConstructorType(FunctionType.TSFunctionType);\n return;\n }\n if (match(tt._new)) {\n // As in `new () => Date`\n tsParseFunctionOrConstructorType(FunctionType.TSConstructorType);\n return;\n } else if (isAbstractConstructorSignature()) {\n // As in `abstract new () => Date`\n tsParseFunctionOrConstructorType(FunctionType.TSAbstractConstructorType);\n return;\n }\n tsParseUnionTypeOrHigher();\n}\n\nexport function tsParseTypeAssertion() {\n const oldIsType = pushTypeContext(1);\n tsParseType();\n expect(tt.greaterThan);\n popTypeContext(oldIsType);\n parseMaybeUnary();\n}\n\nexport function tsTryParseJSXTypeArgument() {\n if (eat(tt.jsxTagStart)) {\n state.tokens[state.tokens.length - 1].type = tt.typeParameterStart;\n const oldIsType = pushTypeContext(1);\n while (!match(tt.greaterThan) && !state.error) {\n tsParseType();\n eat(tt.comma);\n }\n // Process >, but the one after needs to be parsed JSX-style.\n nextJSXTagToken();\n popTypeContext(oldIsType);\n }\n}\n\nfunction tsParseHeritageClause() {\n while (!match(tt.braceL) && !state.error) {\n tsParseExpressionWithTypeArguments();\n eat(tt.comma);\n }\n}\n\nfunction tsParseExpressionWithTypeArguments() {\n // Note: TS uses parseLeftHandSideExpressionOrHigher,\n // then has grammar errors later if it's not an EntityName.\n tsParseEntityName();\n if (match(tt.lessThan)) {\n tsParseTypeArguments();\n }\n}\n\nfunction tsParseInterfaceDeclaration() {\n parseBindingIdentifier(false);\n tsTryParseTypeParameters();\n if (eat(tt._extends)) {\n tsParseHeritageClause();\n }\n tsParseObjectTypeMembers();\n}\n\nfunction tsParseTypeAliasDeclaration() {\n parseBindingIdentifier(false);\n tsTryParseTypeParameters();\n expect(tt.eq);\n tsParseType();\n semicolon();\n}\n\nfunction tsParseEnumMember() {\n // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n if (match(tt.string)) {\n parseLiteral();\n } else {\n parseIdentifier();\n }\n if (eat(tt.eq)) {\n const eqIndex = state.tokens.length - 1;\n parseMaybeAssign();\n state.tokens[eqIndex].rhsEndIndex = state.tokens.length;\n }\n}\n\nfunction tsParseEnumDeclaration() {\n parseBindingIdentifier(false);\n expect(tt.braceL);\n while (!eat(tt.braceR) && !state.error) {\n tsParseEnumMember();\n eat(tt.comma);\n }\n}\n\nfunction tsParseModuleBlock() {\n expect(tt.braceL);\n parseBlockBody(/* end */ tt.braceR);\n}\n\nfunction tsParseModuleOrNamespaceDeclaration() {\n parseBindingIdentifier(false);\n if (eat(tt.dot)) {\n tsParseModuleOrNamespaceDeclaration();\n } else {\n tsParseModuleBlock();\n }\n}\n\nfunction tsParseAmbientExternalModuleDeclaration() {\n if (isContextual(ContextualKeyword._global)) {\n parseIdentifier();\n } else if (match(tt.string)) {\n parseExprAtom();\n } else {\n unexpected();\n }\n\n if (match(tt.braceL)) {\n tsParseModuleBlock();\n } else {\n semicolon();\n }\n}\n\nexport function tsParseImportEqualsDeclaration() {\n parseImportedIdentifier();\n expect(tt.eq);\n tsParseModuleReference();\n semicolon();\n}\n\nfunction tsIsExternalModuleReference() {\n return isContextual(ContextualKeyword._require) && lookaheadType() === tt.parenL;\n}\n\nfunction tsParseModuleReference() {\n if (tsIsExternalModuleReference()) {\n tsParseExternalModuleReference();\n } else {\n tsParseEntityName();\n }\n}\n\nfunction tsParseExternalModuleReference() {\n expectContextual(ContextualKeyword._require);\n expect(tt.parenL);\n if (!match(tt.string)) {\n unexpected();\n }\n parseLiteral();\n expect(tt.parenR);\n}\n\n// Utilities\n\n// Returns true if a statement matched.\nfunction tsTryParseDeclare() {\n if (isLineTerminator()) {\n return false;\n }\n switch (state.type) {\n case tt._function: {\n const oldIsType = pushTypeContext(1);\n next();\n // We don't need to precisely get the function start here, since it's only used to mark\n // the function as a type if it's bodiless, and it's already a type here.\n const functionStart = state.start;\n parseFunction(functionStart, /* isStatement */ true);\n popTypeContext(oldIsType);\n return true;\n }\n case tt._class: {\n const oldIsType = pushTypeContext(1);\n parseClass(/* isStatement */ true, /* optionalId */ false);\n popTypeContext(oldIsType);\n return true;\n }\n case tt._const: {\n if (match(tt._const) && isLookaheadContextual(ContextualKeyword._enum)) {\n const oldIsType = pushTypeContext(1);\n // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n expect(tt._const);\n expectContextual(ContextualKeyword._enum);\n state.tokens[state.tokens.length - 1].type = tt._enum;\n tsParseEnumDeclaration();\n popTypeContext(oldIsType);\n return true;\n }\n }\n // falls through\n case tt._var:\n case tt._let: {\n const oldIsType = pushTypeContext(1);\n parseVarStatement(state.type !== tt._var);\n popTypeContext(oldIsType);\n return true;\n }\n case tt.name: {\n const oldIsType = pushTypeContext(1);\n const contextualKeyword = state.contextualKeyword;\n let matched = false;\n if (contextualKeyword === ContextualKeyword._global) {\n tsParseAmbientExternalModuleDeclaration();\n matched = true;\n } else {\n matched = tsParseDeclaration(contextualKeyword, /* isBeforeToken */ true);\n }\n popTypeContext(oldIsType);\n return matched;\n }\n default:\n return false;\n }\n}\n\n// Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n// Returns true if it matched a declaration.\nfunction tsTryParseExportDeclaration() {\n return tsParseDeclaration(state.contextualKeyword, /* isBeforeToken */ true);\n}\n\n// Returns true if it matched a statement.\nfunction tsParseExpressionStatement(contextualKeyword) {\n switch (contextualKeyword) {\n case ContextualKeyword._declare: {\n const declareTokenIndex = state.tokens.length - 1;\n const matched = tsTryParseDeclare();\n if (matched) {\n state.tokens[declareTokenIndex].type = tt._declare;\n return true;\n }\n break;\n }\n case ContextualKeyword._global:\n // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n if (match(tt.braceL)) {\n tsParseModuleBlock();\n return true;\n }\n break;\n\n default:\n return tsParseDeclaration(contextualKeyword, /* isBeforeToken */ false);\n }\n return false;\n}\n\n/**\n * Common code for parsing a declaration.\n *\n * isBeforeToken indicates that the current parser state is at the contextual\n * keyword (and that it is not yet emitted) rather than reading the token after\n * it. When isBeforeToken is true, we may be preceded by an `export` token and\n * should include that token in a type context we create, e.g. to handle\n * `export interface` or `export type`. (This is a bit of a hack and should be\n * cleaned up at some point.)\n *\n * Returns true if it matched a declaration.\n */\nfunction tsParseDeclaration(contextualKeyword, isBeforeToken) {\n switch (contextualKeyword) {\n case ContextualKeyword._abstract:\n if (tsCheckLineTerminator(isBeforeToken) && match(tt._class)) {\n state.tokens[state.tokens.length - 1].type = tt._abstract;\n parseClass(/* isStatement */ true, /* optionalId */ false);\n return true;\n }\n break;\n\n case ContextualKeyword._enum:\n if (tsCheckLineTerminator(isBeforeToken) && match(tt.name)) {\n state.tokens[state.tokens.length - 1].type = tt._enum;\n tsParseEnumDeclaration();\n return true;\n }\n break;\n\n case ContextualKeyword._interface:\n if (tsCheckLineTerminator(isBeforeToken) && match(tt.name)) {\n // `next` is true in \"export\" and \"declare\" contexts, so we want to remove that token\n // as well.\n const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1);\n tsParseInterfaceDeclaration();\n popTypeContext(oldIsType);\n return true;\n }\n break;\n\n case ContextualKeyword._module:\n if (tsCheckLineTerminator(isBeforeToken)) {\n if (match(tt.string)) {\n const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1);\n tsParseAmbientExternalModuleDeclaration();\n popTypeContext(oldIsType);\n return true;\n } else if (match(tt.name)) {\n const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1);\n tsParseModuleOrNamespaceDeclaration();\n popTypeContext(oldIsType);\n return true;\n }\n }\n break;\n\n case ContextualKeyword._namespace:\n if (tsCheckLineTerminator(isBeforeToken) && match(tt.name)) {\n const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1);\n tsParseModuleOrNamespaceDeclaration();\n popTypeContext(oldIsType);\n return true;\n }\n break;\n\n case ContextualKeyword._type:\n if (tsCheckLineTerminator(isBeforeToken) && match(tt.name)) {\n const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1);\n tsParseTypeAliasDeclaration();\n popTypeContext(oldIsType);\n return true;\n }\n break;\n\n default:\n break;\n }\n return false;\n}\n\nfunction tsCheckLineTerminator(isBeforeToken) {\n if (isBeforeToken) {\n // Babel checks hasFollowingLineBreak here and returns false, but this\n // doesn't actually come up, e.g. `export interface` can never be on its own\n // line in valid code.\n next();\n return true;\n } else {\n return !isLineTerminator();\n }\n}\n\n// Returns true if there was a generic async arrow function.\nfunction tsTryParseGenericAsyncArrowFunction() {\n const snapshot = state.snapshot();\n\n tsParseTypeParameters();\n parseFunctionParams();\n tsTryParseTypeOrTypePredicateAnnotation();\n expect(tt.arrow);\n\n if (state.error) {\n state.restoreFromSnapshot(snapshot);\n return false;\n }\n\n parseFunctionBody(true);\n return true;\n}\n\n/**\n * If necessary, hack the tokenizer state so that this bitshift was actually a\n * less-than token, then keep parsing. This should only be used in situations\n * where we restore from snapshot on error (which reverts this change) or\n * where bitshift would be illegal anyway (e.g. in a class \"extends\" clause).\n *\n * This hack is useful to handle situations like foo<<T>() => void>() where\n * there can legitimately be two open-angle-brackets in a row in TS.\n */\nfunction tsParseTypeArgumentsWithPossibleBitshift() {\n if (state.type === tt.bitShiftL) {\n state.pos -= 1;\n finishToken(tt.lessThan);\n }\n tsParseTypeArguments();\n}\n\nfunction tsParseTypeArguments() {\n const oldIsType = pushTypeContext(0);\n expect(tt.lessThan);\n while (!match(tt.greaterThan) && !state.error) {\n tsParseType();\n eat(tt.comma);\n }\n if (!oldIsType) {\n // If the type arguments are present in an expression context, e.g.\n // f<number>(), then the > sign should be tokenized as a non-type token.\n // In particular, f(a < b, c >= d) should parse the >= as a single token,\n // resulting in a syntax error and fallback to the non-type-args\n // interpretation. In the success case, even though the > is tokenized as a\n // non-type token, it still must be marked as a type token so that it is\n // erased.\n popTypeContext(oldIsType);\n rescan_gt();\n expect(tt.greaterThan);\n state.tokens[state.tokens.length - 1].isType = true;\n } else {\n expect(tt.greaterThan);\n popTypeContext(oldIsType);\n }\n}\n\nexport function tsIsDeclarationStart() {\n if (match(tt.name)) {\n switch (state.contextualKeyword) {\n case ContextualKeyword._abstract:\n case ContextualKeyword._declare:\n case ContextualKeyword._enum:\n case ContextualKeyword._interface:\n case ContextualKeyword._module:\n case ContextualKeyword._namespace:\n case ContextualKeyword._type:\n return true;\n default:\n break;\n }\n }\n\n return false;\n}\n\n// ======================================================\n// OVERRIDES\n// ======================================================\n\nexport function tsParseFunctionBodyAndFinish(functionStart, funcContextId) {\n // For arrow functions, `parseArrow` handles the return type itself.\n if (match(tt.colon)) {\n tsParseTypeOrTypePredicateAnnotation(tt.colon);\n }\n\n // The original code checked the node type to make sure this function type allows a missing\n // body, but we skip that to avoid sending around the node type. We instead just use the\n // allowExpressionBody boolean to make sure it's not an arrow function.\n if (!match(tt.braceL) && isLineTerminator()) {\n // Retroactively mark the function declaration as a type.\n let i = state.tokens.length - 1;\n while (\n i >= 0 &&\n (state.tokens[i].start >= functionStart ||\n state.tokens[i].type === tt._default ||\n state.tokens[i].type === tt._export)\n ) {\n state.tokens[i].isType = true;\n i--;\n }\n return;\n }\n\n parseFunctionBody(false, funcContextId);\n}\n\nexport function tsParseSubscript(\n startTokenIndex,\n noCalls,\n stopState,\n) {\n if (!hasPrecedingLineBreak() && eat(tt.bang)) {\n state.tokens[state.tokens.length - 1].type = tt.nonNullAssertion;\n return;\n }\n\n if (match(tt.lessThan) || match(tt.bitShiftL)) {\n // There are number of things we are going to \"maybe\" parse, like type arguments on\n // tagged template expressions. If any of them fail, walk it back and continue.\n const snapshot = state.snapshot();\n\n if (!noCalls && atPossibleAsync()) {\n // Almost certainly this is a generic async function `async <T>() => ...\n // But it might be a call with a type argument `async<T>();`\n const asyncArrowFn = tsTryParseGenericAsyncArrowFunction();\n if (asyncArrowFn) {\n return;\n }\n }\n tsParseTypeArgumentsWithPossibleBitshift();\n if (!noCalls && eat(tt.parenL)) {\n // With f<T>(), the subscriptStartIndex marker is on the ( token.\n state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex;\n parseCallExpressionArguments();\n } else if (match(tt.backQuote)) {\n // Tagged template with a type argument.\n parseTemplate();\n } else if (\n // The remaining possible case is an instantiation expression, e.g.\n // Array<number> . Check for a few cases that would disqualify it and\n // cause us to bail out.\n // a<b>>c is not (a<b>)>c, but a<(b>>c)\n state.type === tt.greaterThan ||\n // a<b>c is (a<b)>c\n (state.type !== tt.parenL &&\n Boolean(state.type & TokenType.IS_EXPRESSION_START) &&\n !hasPrecedingLineBreak())\n ) {\n // Bail out. We have something like a<b>c, which is not an expression with\n // type arguments but an (a < b) > c comparison.\n unexpected();\n }\n\n if (state.error) {\n state.restoreFromSnapshot(snapshot);\n } else {\n return;\n }\n } else if (!noCalls && match(tt.questionDot) && lookaheadType() === tt.lessThan) {\n // If we see f?.<, then this must be an optional call with a type argument.\n next();\n state.tokens[startTokenIndex].isOptionalChainStart = true;\n // With f?.<T>(), the subscriptStartIndex marker is on the ?. token.\n state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex;\n\n tsParseTypeArguments();\n expect(tt.parenL);\n parseCallExpressionArguments();\n }\n baseParseSubscript(startTokenIndex, noCalls, stopState);\n}\n\nexport function tsTryParseExport() {\n if (eat(tt._import)) {\n // One of these cases:\n // export import A = B;\n // export import type A = require(\"A\");\n if (isContextual(ContextualKeyword._type) && lookaheadType() !== tt.eq) {\n // Eat a `type` token, unless it's actually an identifier name.\n expectContextual(ContextualKeyword._type);\n }\n tsParseImportEqualsDeclaration();\n return true;\n } else if (eat(tt.eq)) {\n // `export = x;`\n parseExpression();\n semicolon();\n return true;\n } else if (eatContextual(ContextualKeyword._as)) {\n // `export as namespace A;`\n // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n expectContextual(ContextualKeyword._namespace);\n parseIdentifier();\n semicolon();\n return true;\n } else {\n if (isContextual(ContextualKeyword._type)) {\n const nextType = lookaheadType();\n // export type {foo} from 'a';\n // export type * from 'a';'\n // export type * as ns from 'a';'\n if (nextType === tt.braceL || nextType === tt.star) {\n next();\n }\n }\n return false;\n }\n}\n\n/**\n * Parse a TS import specifier, which may be prefixed with \"type\" and may be of\n * the form `foo as bar`.\n *\n * The number of identifier-like tokens we see happens to be enough to uniquely\n * identify the form, so simply count the number of identifiers rather than\n * matching the words `type` or `as`. This is particularly important because\n * `type` and `as` could each actually be plain identifiers rather than\n * keywords.\n */\nexport function tsParseImportSpecifier() {\n parseIdentifier();\n if (match(tt.comma) || match(tt.braceR)) {\n // import {foo}\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration;\n return;\n }\n parseIdentifier();\n if (match(tt.comma) || match(tt.braceR)) {\n // import {type foo}\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration;\n state.tokens[state.tokens.length - 2].isType = true;\n state.tokens[state.tokens.length - 1].isType = true;\n return;\n }\n parseIdentifier();\n if (match(tt.comma) || match(tt.braceR)) {\n // import {foo as bar}\n state.tokens[state.tokens.length - 3].identifierRole = IdentifierRole.ImportAccess;\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration;\n return;\n }\n parseIdentifier();\n // import {type foo as bar}\n state.tokens[state.tokens.length - 3].identifierRole = IdentifierRole.ImportAccess;\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration;\n state.tokens[state.tokens.length - 4].isType = true;\n state.tokens[state.tokens.length - 3].isType = true;\n state.tokens[state.tokens.length - 2].isType = true;\n state.tokens[state.tokens.length - 1].isType = true;\n}\n\n/**\n * Just like named import specifiers, export specifiers can have from 1 to 4\n * tokens, inclusive, and the number of tokens determines the role of each token.\n */\nexport function tsParseExportSpecifier() {\n parseIdentifier();\n if (match(tt.comma) || match(tt.braceR)) {\n // export {foo}\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ExportAccess;\n return;\n }\n parseIdentifier();\n if (match(tt.comma) || match(tt.braceR)) {\n // export {type foo}\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ExportAccess;\n state.tokens[state.tokens.length - 2].isType = true;\n state.tokens[state.tokens.length - 1].isType = true;\n return;\n }\n parseIdentifier();\n if (match(tt.comma) || match(tt.braceR)) {\n // export {foo as bar}\n state.tokens[state.tokens.length - 3].identifierRole = IdentifierRole.ExportAccess;\n return;\n }\n parseIdentifier();\n // export {type foo as bar}\n state.tokens[state.tokens.length - 3].identifierRole = IdentifierRole.ExportAccess;\n state.tokens[state.tokens.length - 4].isType = true;\n state.tokens[state.tokens.length - 3].isType = true;\n state.tokens[state.tokens.length - 2].isType = true;\n state.tokens[state.tokens.length - 1].isType = true;\n}\n\nexport function tsTryParseExportDefaultExpression() {\n if (isContextual(ContextualKeyword._abstract) && lookaheadType() === tt._class) {\n state.type = tt._abstract;\n next(); // Skip \"abstract\"\n parseClass(true, true);\n return true;\n }\n if (isContextual(ContextualKeyword._interface)) {\n // Make sure \"export default\" are considered type tokens so the whole thing is removed.\n const oldIsType = pushTypeContext(2);\n tsParseDeclaration(ContextualKeyword._interface, true);\n popTypeContext(oldIsType);\n return true;\n }\n return false;\n}\n\nexport function tsTryParseStatementContent() {\n if (state.type === tt._const) {\n const ahead = lookaheadTypeAndKeyword();\n if (ahead.type === tt.name && ahead.contextualKeyword === ContextualKeyword._enum) {\n expect(tt._const);\n expectContextual(ContextualKeyword._enum);\n state.tokens[state.tokens.length - 1].type = tt._enum;\n tsParseEnumDeclaration();\n return true;\n }\n }\n return false;\n}\n\nexport function tsTryParseClassMemberWithIsStatic(isStatic) {\n const memberStartIndexAfterStatic = state.tokens.length;\n tsParseModifiers([\n ContextualKeyword._abstract,\n ContextualKeyword._readonly,\n ContextualKeyword._declare,\n ContextualKeyword._static,\n ContextualKeyword._override,\n ]);\n\n const modifiersEndIndex = state.tokens.length;\n const found = tsTryParseIndexSignature();\n if (found) {\n // Index signatures are type declarations, so set the modifier tokens as\n // type tokens. Most tokens could be assumed to be type tokens, but `static`\n // is ambiguous unless we set it explicitly here.\n const memberStartIndex = isStatic\n ? memberStartIndexAfterStatic - 1\n : memberStartIndexAfterStatic;\n for (let i = memberStartIndex; i < modifiersEndIndex; i++) {\n state.tokens[i].isType = true;\n }\n return true;\n }\n return false;\n}\n\n// Note: The reason we do this in `parseIdentifierStatement` and not `parseStatement`\n// is that e.g. `type()` is valid JS, so we must try parsing that first.\n// If it's really a type, we will parse `type` as the statement, and can correct it here\n// by parsing the rest.\nexport function tsParseIdentifierStatement(contextualKeyword) {\n const matched = tsParseExpressionStatement(contextualKeyword);\n if (!matched) {\n semicolon();\n }\n}\n\nexport function tsParseExportDeclaration() {\n // \"export declare\" is equivalent to just \"export\".\n const isDeclare = eatContextual(ContextualKeyword._declare);\n if (isDeclare) {\n state.tokens[state.tokens.length - 1].type = tt._declare;\n }\n\n let matchedDeclaration = false;\n if (match(tt.name)) {\n if (isDeclare) {\n const oldIsType = pushTypeContext(2);\n matchedDeclaration = tsTryParseExportDeclaration();\n popTypeContext(oldIsType);\n } else {\n matchedDeclaration = tsTryParseExportDeclaration();\n }\n }\n if (!matchedDeclaration) {\n if (isDeclare) {\n const oldIsType = pushTypeContext(2);\n parseStatement(true);\n popTypeContext(oldIsType);\n } else {\n parseStatement(true);\n }\n }\n}\n\nexport function tsAfterParseClassSuper(hasSuper) {\n if (hasSuper && (match(tt.lessThan) || match(tt.bitShiftL))) {\n tsParseTypeArgumentsWithPossibleBitshift();\n }\n if (eatContextual(ContextualKeyword._implements)) {\n state.tokens[state.tokens.length - 1].type = tt._implements;\n const oldIsType = pushTypeContext(1);\n tsParseHeritageClause();\n popTypeContext(oldIsType);\n }\n}\n\nexport function tsStartParseObjPropValue() {\n tsTryParseTypeParameters();\n}\n\nexport function tsStartParseFunctionParams() {\n tsTryParseTypeParameters();\n}\n\n// `let x: number;`\nexport function tsAfterParseVarHead() {\n const oldIsType = pushTypeContext(0);\n if (!hasPrecedingLineBreak()) {\n eat(tt.bang);\n }\n tsTryParseTypeAnnotation();\n popTypeContext(oldIsType);\n}\n\n// parse the return type of an async arrow function - let foo = (async (): number => {});\nexport function tsStartParseAsyncArrowFromCallExpression() {\n if (match(tt.colon)) {\n tsParseTypeAnnotation();\n }\n}\n\n// Returns true if the expression was an arrow function.\nexport function tsParseMaybeAssign(noIn, isWithinParens) {\n // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n if (isJSXEnabled) {\n return tsParseMaybeAssignWithJSX(noIn, isWithinParens);\n } else {\n return tsParseMaybeAssignWithoutJSX(noIn, isWithinParens);\n }\n}\n\nexport function tsParseMaybeAssignWithJSX(noIn, isWithinParens) {\n if (!match(tt.lessThan)) {\n return baseParseMaybeAssign(noIn, isWithinParens);\n }\n\n // Prefer to parse JSX if possible. But may be an arrow fn.\n const snapshot = state.snapshot();\n let wasArrow = baseParseMaybeAssign(noIn, isWithinParens);\n if (state.error) {\n state.restoreFromSnapshot(snapshot);\n } else {\n return wasArrow;\n }\n\n // Otherwise, try as type-parameterized arrow function.\n state.type = tt.typeParameterStart;\n // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n tsParseTypeParameters();\n wasArrow = baseParseMaybeAssign(noIn, isWithinParens);\n if (!wasArrow) {\n unexpected();\n }\n\n return wasArrow;\n}\n\nexport function tsParseMaybeAssignWithoutJSX(noIn, isWithinParens) {\n if (!match(tt.lessThan)) {\n return baseParseMaybeAssign(noIn, isWithinParens);\n }\n\n const snapshot = state.snapshot();\n // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n tsParseTypeParameters();\n const wasArrow = baseParseMaybeAssign(noIn, isWithinParens);\n if (!wasArrow) {\n unexpected();\n }\n if (state.error) {\n state.restoreFromSnapshot(snapshot);\n } else {\n return wasArrow;\n }\n\n // Try parsing a type cast instead of an arrow function.\n // This will start with a type assertion (via parseMaybeUnary).\n // But don't directly call `tsParseTypeAssertion` because we want to handle any binary after it.\n return baseParseMaybeAssign(noIn, isWithinParens);\n}\n\nexport function tsParseArrow() {\n if (match(tt.colon)) {\n // This is different from how the TS parser does it.\n // TS uses lookahead. Babylon parses it as a parenthesized expression and converts.\n const snapshot = state.snapshot();\n\n tsParseTypeOrTypePredicateAnnotation(tt.colon);\n if (canInsertSemicolon()) unexpected();\n if (!match(tt.arrow)) unexpected();\n\n if (state.error) {\n state.restoreFromSnapshot(snapshot);\n }\n }\n return eat(tt.arrow);\n}\n\n// Allow type annotations inside of a parameter list.\nexport function tsParseAssignableListItemTypes() {\n const oldIsType = pushTypeContext(0);\n eat(tt.question);\n tsTryParseTypeAnnotation();\n popTypeContext(oldIsType);\n}\n\nexport function tsParseMaybeDecoratorArguments() {\n if (match(tt.lessThan) || match(tt.bitShiftL)) {\n tsParseTypeArgumentsWithPossibleBitshift();\n }\n baseParseMaybeDecoratorArguments();\n}\n","import {\n eat,\n finishToken,\n getTokenFromCode,\n IdentifierRole,\n JSXRole,\n match,\n next,\n skipSpace,\n Token,\n} from \"../../tokenizer/index\";\nimport {TokenType as tt} from \"../../tokenizer/types\";\nimport {input, isTypeScriptEnabled, state} from \"../../traverser/base\";\nimport {parseExpression, parseMaybeAssign} from \"../../traverser/expression\";\nimport {expect, unexpected} from \"../../traverser/util\";\nimport {charCodes} from \"../../util/charcodes\";\nimport {IS_IDENTIFIER_CHAR, IS_IDENTIFIER_START} from \"../../util/identifier\";\nimport {tsTryParseJSXTypeArgument} from \"../typescript\";\n\n/**\n * Read token with JSX contents.\n *\n * In addition to detecting jsxTagStart and also regular tokens that might be\n * part of an expression, this code detects the start and end of text ranges\n * within JSX children. In order to properly count the number of children, we\n * distinguish jsxText from jsxEmptyText, which is a text range that simplifies\n * to the empty string after JSX whitespace trimming.\n *\n * It turns out that a JSX text range will simplify to the empty string if and\n * only if both of these conditions hold:\n * - The range consists entirely of whitespace characters (only counting space,\n * tab, \\r, and \\n).\n * - The range has at least one newline.\n * This can be proven by analyzing any implementation of whitespace trimming,\n * e.g. formatJSXTextLiteral in Sucrase or cleanJSXElementLiteralChild in Babel.\n */\nfunction jsxReadToken() {\n let sawNewline = false;\n let sawNonWhitespace = false;\n while (true) {\n if (state.pos >= input.length) {\n unexpected(\"Unterminated JSX contents\");\n return;\n }\n\n const ch = input.charCodeAt(state.pos);\n if (ch === charCodes.lessThan || ch === charCodes.leftCurlyBrace) {\n if (state.pos === state.start) {\n if (ch === charCodes.lessThan) {\n state.pos++;\n finishToken(tt.jsxTagStart);\n return;\n }\n getTokenFromCode(ch);\n return;\n }\n if (sawNewline && !sawNonWhitespace) {\n finishToken(tt.jsxEmptyText);\n } else {\n finishToken(tt.jsxText);\n }\n return;\n }\n\n // This is part of JSX text.\n if (ch === charCodes.lineFeed) {\n sawNewline = true;\n } else if (ch !== charCodes.space && ch !== charCodes.carriageReturn && ch !== charCodes.tab) {\n sawNonWhitespace = true;\n }\n state.pos++;\n }\n}\n\nfunction jsxReadString(quote) {\n state.pos++;\n for (;;) {\n if (state.pos >= input.length) {\n unexpected(\"Unterminated string constant\");\n return;\n }\n\n const ch = input.charCodeAt(state.pos);\n if (ch === quote) {\n state.pos++;\n break;\n }\n state.pos++;\n }\n finishToken(tt.string);\n}\n\n// Read a JSX identifier (valid tag or attribute name).\n//\n// Optimized version since JSX identifiers can't contain\n// escape characters and so can be read as single slice.\n// Also assumes that first character was already checked\n// by isIdentifierStart in readToken.\n\nfunction jsxReadWord() {\n let ch;\n do {\n if (state.pos > input.length) {\n unexpected(\"Unexpectedly reached the end of input.\");\n return;\n }\n ch = input.charCodeAt(++state.pos);\n } while (IS_IDENTIFIER_CHAR[ch] || ch === charCodes.dash);\n finishToken(tt.jsxName);\n}\n\n// Parse next token as JSX identifier\nfunction jsxParseIdentifier() {\n nextJSXTagToken();\n}\n\n// Parse namespaced identifier.\nfunction jsxParseNamespacedName(identifierRole) {\n jsxParseIdentifier();\n if (!eat(tt.colon)) {\n // Plain identifier, so this is an access.\n state.tokens[state.tokens.length - 1].identifierRole = identifierRole;\n return;\n }\n // Process the second half of the namespaced name.\n jsxParseIdentifier();\n}\n\n// Parses element name in any form - namespaced, member\n// or single identifier.\nfunction jsxParseElementName() {\n const firstTokenIndex = state.tokens.length;\n jsxParseNamespacedName(IdentifierRole.Access);\n let hadDot = false;\n while (match(tt.dot)) {\n hadDot = true;\n nextJSXTagToken();\n jsxParseIdentifier();\n }\n // For tags like <div> with a lowercase letter and no dots, the name is\n // actually *not* an identifier access, since it's referring to a built-in\n // tag name. Remove the identifier role in this case so that it's not\n // accidentally transformed by the imports transform when preserving JSX.\n if (!hadDot) {\n const firstToken = state.tokens[firstTokenIndex];\n const firstChar = input.charCodeAt(firstToken.start);\n if (firstChar >= charCodes.lowercaseA && firstChar <= charCodes.lowercaseZ) {\n firstToken.identifierRole = null;\n }\n }\n}\n\n// Parses any type of JSX attribute value.\nfunction jsxParseAttributeValue() {\n switch (state.type) {\n case tt.braceL:\n next();\n parseExpression();\n nextJSXTagToken();\n return;\n\n case tt.jsxTagStart:\n jsxParseElement();\n nextJSXTagToken();\n return;\n\n case tt.string:\n nextJSXTagToken();\n return;\n\n default:\n unexpected(\"JSX value should be either an expression or a quoted JSX text\");\n }\n}\n\n// Parse JSX spread child, after already processing the {\n// Does not parse the closing }\nfunction jsxParseSpreadChild() {\n expect(tt.ellipsis);\n parseExpression();\n}\n\n// Parses JSX opening tag starting after \"<\".\n// Returns true if the tag was self-closing.\n// Does not parse the last token.\nfunction jsxParseOpeningElement(initialTokenIndex) {\n if (match(tt.jsxTagEnd)) {\n // This is an open-fragment.\n return false;\n }\n jsxParseElementName();\n if (isTypeScriptEnabled) {\n tsTryParseJSXTypeArgument();\n }\n let hasSeenPropSpread = false;\n while (!match(tt.slash) && !match(tt.jsxTagEnd) && !state.error) {\n if (eat(tt.braceL)) {\n hasSeenPropSpread = true;\n expect(tt.ellipsis);\n parseMaybeAssign();\n // }\n nextJSXTagToken();\n continue;\n }\n if (\n hasSeenPropSpread &&\n state.end - state.start === 3 &&\n input.charCodeAt(state.start) === charCodes.lowercaseK &&\n input.charCodeAt(state.start + 1) === charCodes.lowercaseE &&\n input.charCodeAt(state.start + 2) === charCodes.lowercaseY\n ) {\n state.tokens[initialTokenIndex].jsxRole = JSXRole.KeyAfterPropSpread;\n }\n jsxParseNamespacedName(IdentifierRole.ObjectKey);\n if (match(tt.eq)) {\n nextJSXTagToken();\n jsxParseAttributeValue();\n }\n }\n const isSelfClosing = match(tt.slash);\n if (isSelfClosing) {\n // /\n nextJSXTagToken();\n }\n return isSelfClosing;\n}\n\n// Parses JSX closing tag starting after \"</\".\n// Does not parse the last token.\nfunction jsxParseClosingElement() {\n if (match(tt.jsxTagEnd)) {\n // Fragment syntax, so we immediately have a tag end.\n return;\n }\n jsxParseElementName();\n}\n\n// Parses entire JSX element, including its opening tag\n// (starting after \"<\"), attributes, contents and closing tag.\n// Does not parse the last token.\nfunction jsxParseElementAt() {\n const initialTokenIndex = state.tokens.length - 1;\n state.tokens[initialTokenIndex].jsxRole = JSXRole.NoChildren;\n let numExplicitChildren = 0;\n const isSelfClosing = jsxParseOpeningElement(initialTokenIndex);\n if (!isSelfClosing) {\n nextJSXExprToken();\n while (true) {\n switch (state.type) {\n case tt.jsxTagStart:\n nextJSXTagToken();\n if (match(tt.slash)) {\n nextJSXTagToken();\n jsxParseClosingElement();\n // Key after prop spread takes precedence over number of children,\n // since it means we switch to createElement, which doesn't care\n // about number of children.\n if (state.tokens[initialTokenIndex].jsxRole !== JSXRole.KeyAfterPropSpread) {\n if (numExplicitChildren === 1) {\n state.tokens[initialTokenIndex].jsxRole = JSXRole.OneChild;\n } else if (numExplicitChildren > 1) {\n state.tokens[initialTokenIndex].jsxRole = JSXRole.StaticChildren;\n }\n }\n return;\n }\n numExplicitChildren++;\n jsxParseElementAt();\n nextJSXExprToken();\n break;\n\n case tt.jsxText:\n numExplicitChildren++;\n nextJSXExprToken();\n break;\n\n case tt.jsxEmptyText:\n nextJSXExprToken();\n break;\n\n case tt.braceL:\n next();\n if (match(tt.ellipsis)) {\n jsxParseSpreadChild();\n nextJSXExprToken();\n // Spread children are a mechanism to explicitly mark children as\n // static, so count it as 2 children to satisfy the \"more than one\n // child\" condition.\n numExplicitChildren += 2;\n } else {\n // If we see {}, this is an empty pseudo-expression that doesn't\n // count as a child.\n if (!match(tt.braceR)) {\n numExplicitChildren++;\n parseExpression();\n }\n nextJSXExprToken();\n }\n\n break;\n\n // istanbul ignore next - should never happen\n default:\n unexpected();\n return;\n }\n }\n }\n}\n\n// Parses entire JSX element from current position.\n// Does not parse the last token.\nexport function jsxParseElement() {\n nextJSXTagToken();\n jsxParseElementAt();\n}\n\n// ==================================\n// Overrides\n// ==================================\n\nexport function nextJSXTagToken() {\n state.tokens.push(new Token());\n skipSpace();\n state.start = state.pos;\n const code = input.charCodeAt(state.pos);\n\n if (IS_IDENTIFIER_START[code]) {\n jsxReadWord();\n } else if (code === charCodes.quotationMark || code === charCodes.apostrophe) {\n jsxReadString(code);\n } else {\n // The following tokens are just one character each.\n ++state.pos;\n switch (code) {\n case charCodes.greaterThan:\n finishToken(tt.jsxTagEnd);\n break;\n case charCodes.lessThan:\n finishToken(tt.jsxTagStart);\n break;\n case charCodes.slash:\n finishToken(tt.slash);\n break;\n case charCodes.equalsTo:\n finishToken(tt.eq);\n break;\n case charCodes.leftCurlyBrace:\n finishToken(tt.braceL);\n break;\n case charCodes.dot:\n finishToken(tt.dot);\n break;\n case charCodes.colon:\n finishToken(tt.colon);\n break;\n default:\n unexpected();\n }\n }\n}\n\nfunction nextJSXExprToken() {\n state.tokens.push(new Token());\n state.start = state.pos;\n jsxReadToken();\n}\n","import {eatTypeToken, lookaheadType, match} from \"../tokenizer/index\";\nimport {TokenType as tt} from \"../tokenizer/types\";\nimport {isFlowEnabled, isTypeScriptEnabled} from \"../traverser/base\";\nimport {baseParseConditional} from \"../traverser/expression\";\nimport {flowParseTypeAnnotation} from \"./flow\";\nimport {tsParseTypeAnnotation} from \"./typescript\";\n\n/**\n * Common parser code for TypeScript and Flow.\n */\n\n// An apparent conditional expression could actually be an optional parameter in an arrow function.\nexport function typedParseConditional(noIn) {\n // If we see ?:, this can't possibly be a valid conditional. typedParseParenItem will be called\n // later to finish off the arrow parameter. We also need to handle bare ? tokens for optional\n // parameters without type annotations, i.e. ?, and ?) .\n if (match(tt.question)) {\n const nextType = lookaheadType();\n if (nextType === tt.colon || nextType === tt.comma || nextType === tt.parenR) {\n return;\n }\n }\n baseParseConditional(noIn);\n}\n\n// Note: These \"type casts\" are *not* valid TS expressions.\n// But we parse them here and change them when completing the arrow function.\nexport function typedParseParenItem() {\n eatTypeToken(tt.question);\n if (match(tt.colon)) {\n if (isTypeScriptEnabled) {\n tsParseTypeAnnotation();\n } else if (isFlowEnabled) {\n flowParseTypeAnnotation();\n }\n }\n}\n","/* eslint max-len: 0 */\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {\n flowParseArrow,\n flowParseFunctionBodyAndFinish,\n flowParseMaybeAssign,\n flowParseSubscript,\n flowParseSubscripts,\n flowParseVariance,\n flowStartParseAsyncArrowFromCallExpression,\n flowStartParseNewArguments,\n flowStartParseObjPropValue,\n} from \"../plugins/flow\";\nimport {jsxParseElement} from \"../plugins/jsx/index\";\nimport {typedParseConditional, typedParseParenItem} from \"../plugins/types\";\nimport {\n tsParseArrow,\n tsParseFunctionBodyAndFinish,\n tsParseMaybeAssign,\n tsParseSubscript,\n tsParseType,\n tsParseTypeAssertion,\n tsStartParseAsyncArrowFromCallExpression,\n tsStartParseObjPropValue,\n} from \"../plugins/typescript\";\nimport {\n eat,\n IdentifierRole,\n lookaheadCharCode,\n lookaheadType,\n match,\n next,\n nextTemplateToken,\n popTypeContext,\n pushTypeContext,\n rescan_gt,\n retokenizeSlashAsRegex,\n} from \"../tokenizer/index\";\nimport {ContextualKeyword} from \"../tokenizer/keywords\";\nimport {Scope} from \"../tokenizer/state\";\nimport {TokenType, TokenType as tt} from \"../tokenizer/types\";\nimport {charCodes} from \"../util/charcodes\";\nimport {IS_IDENTIFIER_START} from \"../util/identifier\";\nimport {getNextContextId, isFlowEnabled, isJSXEnabled, isTypeScriptEnabled, state} from \"./base\";\nimport {\n markPriorBindingIdentifier,\n parseBindingIdentifier,\n parseMaybeDefault,\n parseRest,\n parseSpread,\n} from \"./lval\";\nimport {\n parseBlock,\n parseBlockBody,\n parseClass,\n parseDecorators,\n parseFunction,\n parseFunctionParams,\n} from \"./statement\";\nimport {\n canInsertSemicolon,\n eatContextual,\n expect,\n expectContextual,\n hasFollowingLineBreak,\n hasPrecedingLineBreak,\n isContextual,\n unexpected,\n} from \"./util\";\n\nexport class StopState {\n \n constructor(stop) {\n this.stop = stop;\n }\n}\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function (s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\nexport function parseExpression(noIn = false) {\n parseMaybeAssign(noIn);\n if (match(tt.comma)) {\n while (eat(tt.comma)) {\n parseMaybeAssign(noIn);\n }\n }\n}\n\n/**\n * noIn is used when parsing a for loop so that we don't interpret a following \"in\" as the binary\n * operatior.\n * isWithinParens is used to indicate that we're parsing something that might be a comma expression\n * or might be an arrow function or might be a Flow type assertion (which requires explicit parens).\n * In these cases, we should allow : and ?: after the initial \"left\" part.\n */\nexport function parseMaybeAssign(noIn = false, isWithinParens = false) {\n if (isTypeScriptEnabled) {\n return tsParseMaybeAssign(noIn, isWithinParens);\n } else if (isFlowEnabled) {\n return flowParseMaybeAssign(noIn, isWithinParens);\n } else {\n return baseParseMaybeAssign(noIn, isWithinParens);\n }\n}\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n// Returns true if the expression was an arrow function.\nexport function baseParseMaybeAssign(noIn, isWithinParens) {\n if (match(tt._yield)) {\n parseYield();\n return false;\n }\n\n if (match(tt.parenL) || match(tt.name) || match(tt._yield)) {\n state.potentialArrowAt = state.start;\n }\n\n const wasArrow = parseMaybeConditional(noIn);\n if (isWithinParens) {\n parseParenItem();\n }\n if (state.type & TokenType.IS_ASSIGN) {\n next();\n parseMaybeAssign(noIn);\n return false;\n }\n return wasArrow;\n}\n\n// Parse a ternary conditional (`?:`) operator.\n// Returns true if the expression was an arrow function.\nfunction parseMaybeConditional(noIn) {\n const wasArrow = parseExprOps(noIn);\n if (wasArrow) {\n return true;\n }\n parseConditional(noIn);\n return false;\n}\n\nfunction parseConditional(noIn) {\n if (isTypeScriptEnabled || isFlowEnabled) {\n typedParseConditional(noIn);\n } else {\n baseParseConditional(noIn);\n }\n}\n\nexport function baseParseConditional(noIn) {\n if (eat(tt.question)) {\n parseMaybeAssign();\n expect(tt.colon);\n parseMaybeAssign(noIn);\n }\n}\n\n// Start the precedence parser.\n// Returns true if this was an arrow function\nfunction parseExprOps(noIn) {\n const startTokenIndex = state.tokens.length;\n const wasArrow = parseMaybeUnary();\n if (wasArrow) {\n return true;\n }\n parseExprOp(startTokenIndex, -1, noIn);\n return false;\n}\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\nfunction parseExprOp(startTokenIndex, minPrec, noIn) {\n if (\n isTypeScriptEnabled &&\n (tt._in & TokenType.PRECEDENCE_MASK) > minPrec &&\n !hasPrecedingLineBreak() &&\n (eatContextual(ContextualKeyword._as) || eatContextual(ContextualKeyword._satisfies))\n ) {\n const oldIsType = pushTypeContext(1);\n tsParseType();\n popTypeContext(oldIsType);\n rescan_gt();\n parseExprOp(startTokenIndex, minPrec, noIn);\n return;\n }\n\n const prec = state.type & TokenType.PRECEDENCE_MASK;\n if (prec > 0 && (!noIn || !match(tt._in))) {\n if (prec > minPrec) {\n const op = state.type;\n next();\n if (op === tt.nullishCoalescing) {\n state.tokens[state.tokens.length - 1].nullishStartIndex = startTokenIndex;\n }\n\n const rhsStartTokenIndex = state.tokens.length;\n parseMaybeUnary();\n // Extend the right operand of this operator if possible.\n parseExprOp(rhsStartTokenIndex, op & TokenType.IS_RIGHT_ASSOCIATIVE ? prec - 1 : prec, noIn);\n if (op === tt.nullishCoalescing) {\n state.tokens[startTokenIndex].numNullishCoalesceStarts++;\n state.tokens[state.tokens.length - 1].numNullishCoalesceEnds++;\n }\n // Continue with any future operator holding this expression as the left operand.\n parseExprOp(startTokenIndex, minPrec, noIn);\n }\n }\n}\n\n// Parse unary operators, both prefix and postfix.\n// Returns true if this was an arrow function.\nexport function parseMaybeUnary() {\n if (isTypeScriptEnabled && !isJSXEnabled && eat(tt.lessThan)) {\n tsParseTypeAssertion();\n return false;\n }\n if (\n isContextual(ContextualKeyword._module) &&\n lookaheadCharCode() === charCodes.leftCurlyBrace &&\n !hasFollowingLineBreak()\n ) {\n parseModuleExpression();\n return false;\n }\n if (state.type & TokenType.IS_PREFIX) {\n next();\n parseMaybeUnary();\n return false;\n }\n\n const wasArrow = parseExprSubscripts();\n if (wasArrow) {\n return true;\n }\n while (state.type & TokenType.IS_POSTFIX && !canInsertSemicolon()) {\n // The tokenizer calls everything a preincrement, so make it a postincrement when\n // we see it in that context.\n if (state.type === tt.preIncDec) {\n state.type = tt.postIncDec;\n }\n next();\n }\n return false;\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n// Returns true if this was an arrow function.\nexport function parseExprSubscripts() {\n const startTokenIndex = state.tokens.length;\n const wasArrow = parseExprAtom();\n if (wasArrow) {\n return true;\n }\n parseSubscripts(startTokenIndex);\n // If there was any optional chain operation, the start token would be marked\n // as such, so also mark the end now.\n if (state.tokens.length > startTokenIndex && state.tokens[startTokenIndex].isOptionalChainStart) {\n state.tokens[state.tokens.length - 1].isOptionalChainEnd = true;\n }\n return false;\n}\n\nfunction parseSubscripts(startTokenIndex, noCalls = false) {\n if (isFlowEnabled) {\n flowParseSubscripts(startTokenIndex, noCalls);\n } else {\n baseParseSubscripts(startTokenIndex, noCalls);\n }\n}\n\nexport function baseParseSubscripts(startTokenIndex, noCalls = false) {\n const stopState = new StopState(false);\n do {\n parseSubscript(startTokenIndex, noCalls, stopState);\n } while (!stopState.stop && !state.error);\n}\n\nfunction parseSubscript(startTokenIndex, noCalls, stopState) {\n if (isTypeScriptEnabled) {\n tsParseSubscript(startTokenIndex, noCalls, stopState);\n } else if (isFlowEnabled) {\n flowParseSubscript(startTokenIndex, noCalls, stopState);\n } else {\n baseParseSubscript(startTokenIndex, noCalls, stopState);\n }\n}\n\n/** Set 'state.stop = true' to indicate that we should stop parsing subscripts. */\nexport function baseParseSubscript(\n startTokenIndex,\n noCalls,\n stopState,\n) {\n if (!noCalls && eat(tt.doubleColon)) {\n parseNoCallExpr();\n stopState.stop = true;\n // Propagate startTokenIndex so that `a::b?.()` will keep `a` as the first token. We may want\n // to revisit this in the future when fully supporting bind syntax.\n parseSubscripts(startTokenIndex, noCalls);\n } else if (match(tt.questionDot)) {\n state.tokens[startTokenIndex].isOptionalChainStart = true;\n if (noCalls && lookaheadType() === tt.parenL) {\n stopState.stop = true;\n return;\n }\n next();\n state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex;\n\n if (eat(tt.bracketL)) {\n parseExpression();\n expect(tt.bracketR);\n } else if (eat(tt.parenL)) {\n parseCallExpressionArguments();\n } else {\n parseMaybePrivateName();\n }\n } else if (eat(tt.dot)) {\n state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex;\n parseMaybePrivateName();\n } else if (eat(tt.bracketL)) {\n state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex;\n parseExpression();\n expect(tt.bracketR);\n } else if (!noCalls && match(tt.parenL)) {\n if (atPossibleAsync()) {\n // We see \"async\", but it's possible it's a usage of the name \"async\". Parse as if it's a\n // function call, and if we see an arrow later, backtrack and re-parse as a parameter list.\n const snapshot = state.snapshot();\n const asyncStartTokenIndex = state.tokens.length;\n next();\n state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex;\n\n const callContextId = getNextContextId();\n\n state.tokens[state.tokens.length - 1].contextId = callContextId;\n parseCallExpressionArguments();\n state.tokens[state.tokens.length - 1].contextId = callContextId;\n\n if (shouldParseAsyncArrow()) {\n // We hit an arrow, so backtrack and start again parsing function parameters.\n state.restoreFromSnapshot(snapshot);\n stopState.stop = true;\n state.scopeDepth++;\n\n parseFunctionParams();\n parseAsyncArrowFromCallExpression(asyncStartTokenIndex);\n }\n } else {\n next();\n state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex;\n const callContextId = getNextContextId();\n state.tokens[state.tokens.length - 1].contextId = callContextId;\n parseCallExpressionArguments();\n state.tokens[state.tokens.length - 1].contextId = callContextId;\n }\n } else if (match(tt.backQuote)) {\n // Tagged template expression.\n parseTemplate();\n } else {\n stopState.stop = true;\n }\n}\n\nexport function atPossibleAsync() {\n // This was made less strict than the original version to avoid passing around nodes, but it\n // should be safe to have rare false positives here.\n return (\n state.tokens[state.tokens.length - 1].contextualKeyword === ContextualKeyword._async &&\n !canInsertSemicolon()\n );\n}\n\nexport function parseCallExpressionArguments() {\n let first = true;\n while (!eat(tt.parenR) && !state.error) {\n if (first) {\n first = false;\n } else {\n expect(tt.comma);\n if (eat(tt.parenR)) {\n break;\n }\n }\n\n parseExprListItem(false);\n }\n}\n\nfunction shouldParseAsyncArrow() {\n return match(tt.colon) || match(tt.arrow);\n}\n\nfunction parseAsyncArrowFromCallExpression(startTokenIndex) {\n if (isTypeScriptEnabled) {\n tsStartParseAsyncArrowFromCallExpression();\n } else if (isFlowEnabled) {\n flowStartParseAsyncArrowFromCallExpression();\n }\n expect(tt.arrow);\n parseArrowExpression(startTokenIndex);\n}\n\n// Parse a no-call expression (like argument of `new` or `::` operators).\n\nfunction parseNoCallExpr() {\n const startTokenIndex = state.tokens.length;\n parseExprAtom();\n parseSubscripts(startTokenIndex, true);\n}\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n// Returns true if the parsed expression was an arrow function.\nexport function parseExprAtom() {\n if (eat(tt.modulo)) {\n // V8 intrinsic expression. Just parse the identifier, and the function invocation is parsed\n // naturally.\n parseIdentifier();\n return false;\n }\n\n if (match(tt.jsxText) || match(tt.jsxEmptyText)) {\n parseLiteral();\n return false;\n } else if (match(tt.lessThan) && isJSXEnabled) {\n state.type = tt.jsxTagStart;\n jsxParseElement();\n next();\n return false;\n }\n\n const canBeArrow = state.potentialArrowAt === state.start;\n switch (state.type) {\n case tt.slash:\n case tt.assign:\n retokenizeSlashAsRegex();\n // Fall through.\n\n case tt._super:\n case tt._this:\n case tt.regexp:\n case tt.num:\n case tt.bigint:\n case tt.decimal:\n case tt.string:\n case tt._null:\n case tt._true:\n case tt._false:\n next();\n return false;\n\n case tt._import:\n next();\n if (match(tt.dot)) {\n // import.meta\n state.tokens[state.tokens.length - 1].type = tt.name;\n next();\n parseIdentifier();\n }\n return false;\n\n case tt.name: {\n const startTokenIndex = state.tokens.length;\n const functionStart = state.start;\n const contextualKeyword = state.contextualKeyword;\n parseIdentifier();\n if (contextualKeyword === ContextualKeyword._await) {\n parseAwait();\n return false;\n } else if (\n contextualKeyword === ContextualKeyword._async &&\n match(tt._function) &&\n !canInsertSemicolon()\n ) {\n next();\n parseFunction(functionStart, false);\n return false;\n } else if (\n canBeArrow &&\n contextualKeyword === ContextualKeyword._async &&\n !canInsertSemicolon() &&\n match(tt.name)\n ) {\n state.scopeDepth++;\n parseBindingIdentifier(false);\n expect(tt.arrow);\n // let foo = async bar => {};\n parseArrowExpression(startTokenIndex);\n return true;\n } else if (match(tt._do) && !canInsertSemicolon()) {\n next();\n parseBlock();\n return false;\n }\n\n if (canBeArrow && !canInsertSemicolon() && match(tt.arrow)) {\n state.scopeDepth++;\n markPriorBindingIdentifier(false);\n expect(tt.arrow);\n parseArrowExpression(startTokenIndex);\n return true;\n }\n\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.Access;\n return false;\n }\n\n case tt._do: {\n next();\n parseBlock();\n return false;\n }\n\n case tt.parenL: {\n const wasArrow = parseParenAndDistinguishExpression(canBeArrow);\n return wasArrow;\n }\n\n case tt.bracketL:\n next();\n parseExprList(tt.bracketR, true);\n return false;\n\n case tt.braceL:\n parseObj(false, false);\n return false;\n\n case tt._function:\n parseFunctionExpression();\n return false;\n\n case tt.at:\n parseDecorators();\n // Fall through.\n\n case tt._class:\n parseClass(false);\n return false;\n\n case tt._new:\n parseNew();\n return false;\n\n case tt.backQuote:\n parseTemplate();\n return false;\n\n case tt.doubleColon: {\n next();\n parseNoCallExpr();\n return false;\n }\n\n case tt.hash: {\n const code = lookaheadCharCode();\n if (IS_IDENTIFIER_START[code] || code === charCodes.backslash) {\n parseMaybePrivateName();\n } else {\n next();\n }\n // Smart pipeline topic reference.\n return false;\n }\n\n default:\n unexpected();\n return false;\n }\n}\n\nfunction parseMaybePrivateName() {\n eat(tt.hash);\n parseIdentifier();\n}\n\nfunction parseFunctionExpression() {\n const functionStart = state.start;\n parseIdentifier();\n if (eat(tt.dot)) {\n // function.sent\n parseIdentifier();\n }\n parseFunction(functionStart, false);\n}\n\nexport function parseLiteral() {\n next();\n}\n\nexport function parseParenExpression() {\n expect(tt.parenL);\n parseExpression();\n expect(tt.parenR);\n}\n\n// Returns true if this was an arrow expression.\nfunction parseParenAndDistinguishExpression(canBeArrow) {\n // Assume this is a normal parenthesized expression, but if we see an arrow, we'll bail and\n // start over as a parameter list.\n const snapshot = state.snapshot();\n\n const startTokenIndex = state.tokens.length;\n expect(tt.parenL);\n\n let first = true;\n\n while (!match(tt.parenR) && !state.error) {\n if (first) {\n first = false;\n } else {\n expect(tt.comma);\n if (match(tt.parenR)) {\n break;\n }\n }\n\n if (match(tt.ellipsis)) {\n parseRest(false /* isBlockScope */);\n parseParenItem();\n break;\n } else {\n parseMaybeAssign(false, true);\n }\n }\n\n expect(tt.parenR);\n\n if (canBeArrow && shouldParseArrow()) {\n const wasArrow = parseArrow();\n if (wasArrow) {\n // It was an arrow function this whole time, so start over and parse it as params so that we\n // get proper token annotations.\n state.restoreFromSnapshot(snapshot);\n state.scopeDepth++;\n // Don't specify a context ID because arrow functions don't need a context ID.\n parseFunctionParams();\n parseArrow();\n parseArrowExpression(startTokenIndex);\n if (state.error) {\n // Nevermind! This must have been something that looks very much like an\n // arrow function but where its \"parameter list\" isn't actually a valid\n // parameter list. Force non-arrow parsing.\n // See https://github.com/alangpierce/sucrase/issues/666 for an example.\n state.restoreFromSnapshot(snapshot);\n parseParenAndDistinguishExpression(false);\n return false;\n }\n return true;\n }\n }\n\n return false;\n}\n\nfunction shouldParseArrow() {\n return match(tt.colon) || !canInsertSemicolon();\n}\n\n// Returns whether there was an arrow token.\nexport function parseArrow() {\n if (isTypeScriptEnabled) {\n return tsParseArrow();\n } else if (isFlowEnabled) {\n return flowParseArrow();\n } else {\n return eat(tt.arrow);\n }\n}\n\nfunction parseParenItem() {\n if (isTypeScriptEnabled || isFlowEnabled) {\n typedParseParenItem();\n }\n}\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\nfunction parseNew() {\n expect(tt._new);\n if (eat(tt.dot)) {\n // new.target\n parseIdentifier();\n return;\n }\n parseNewCallee();\n if (isFlowEnabled) {\n flowStartParseNewArguments();\n }\n if (eat(tt.parenL)) {\n parseExprList(tt.parenR);\n }\n}\n\nfunction parseNewCallee() {\n parseNoCallExpr();\n eat(tt.questionDot);\n}\n\nexport function parseTemplate() {\n // Finish `, read quasi\n nextTemplateToken();\n // Finish quasi, read ${\n nextTemplateToken();\n while (!match(tt.backQuote) && !state.error) {\n expect(tt.dollarBraceL);\n parseExpression();\n // Finish }, read quasi\n nextTemplateToken();\n // Finish quasi, read either ${ or `\n nextTemplateToken();\n }\n next();\n}\n\n// Parse an object literal or binding pattern.\nexport function parseObj(isPattern, isBlockScope) {\n // Attach a context ID to the object open and close brace and each object key.\n const contextId = getNextContextId();\n let first = true;\n\n next();\n state.tokens[state.tokens.length - 1].contextId = contextId;\n\n while (!eat(tt.braceR) && !state.error) {\n if (first) {\n first = false;\n } else {\n expect(tt.comma);\n if (eat(tt.braceR)) {\n break;\n }\n }\n\n let isGenerator = false;\n if (match(tt.ellipsis)) {\n const previousIndex = state.tokens.length;\n parseSpread();\n if (isPattern) {\n // Mark role when the only thing being spread over is an identifier.\n if (state.tokens.length === previousIndex + 2) {\n markPriorBindingIdentifier(isBlockScope);\n }\n if (eat(tt.braceR)) {\n break;\n }\n }\n continue;\n }\n\n if (!isPattern) {\n isGenerator = eat(tt.star);\n }\n\n if (!isPattern && isContextual(ContextualKeyword._async)) {\n if (isGenerator) unexpected();\n\n parseIdentifier();\n if (\n match(tt.colon) ||\n match(tt.parenL) ||\n match(tt.braceR) ||\n match(tt.eq) ||\n match(tt.comma)\n ) {\n // This is a key called \"async\" rather than an async function.\n } else {\n if (match(tt.star)) {\n next();\n isGenerator = true;\n }\n parsePropertyName(contextId);\n }\n } else {\n parsePropertyName(contextId);\n }\n\n parseObjPropValue(isPattern, isBlockScope, contextId);\n }\n\n state.tokens[state.tokens.length - 1].contextId = contextId;\n}\n\nfunction isGetterOrSetterMethod(isPattern) {\n // We go off of the next and don't bother checking if the node key is actually \"get\" or \"set\".\n // This lets us avoid generating a node, and should only make the validation worse.\n return (\n !isPattern &&\n (match(tt.string) || // get \"string\"() {}\n match(tt.num) || // get 1() {}\n match(tt.bracketL) || // get [\"string\"]() {}\n match(tt.name) || // get foo() {}\n !!(state.type & TokenType.IS_KEYWORD)) // get debugger() {}\n );\n}\n\n// Returns true if this was a method.\nfunction parseObjectMethod(isPattern, objectContextId) {\n // We don't need to worry about modifiers because object methods can't have optional bodies, so\n // the start will never be used.\n const functionStart = state.start;\n if (match(tt.parenL)) {\n if (isPattern) unexpected();\n parseMethod(functionStart, /* isConstructor */ false);\n return true;\n }\n\n if (isGetterOrSetterMethod(isPattern)) {\n parsePropertyName(objectContextId);\n parseMethod(functionStart, /* isConstructor */ false);\n return true;\n }\n return false;\n}\n\nfunction parseObjectProperty(isPattern, isBlockScope) {\n if (eat(tt.colon)) {\n if (isPattern) {\n parseMaybeDefault(isBlockScope);\n } else {\n parseMaybeAssign(false);\n }\n return;\n }\n\n // Since there's no colon, we assume this is an object shorthand.\n\n // If we're in a destructuring, we've now discovered that the key was actually an assignee, so\n // we need to tag it as a declaration with the appropriate scope. Otherwise, we might need to\n // transform it on access, so mark it as a normal object shorthand.\n let identifierRole;\n if (isPattern) {\n if (state.scopeDepth === 0) {\n identifierRole = IdentifierRole.ObjectShorthandTopLevelDeclaration;\n } else if (isBlockScope) {\n identifierRole = IdentifierRole.ObjectShorthandBlockScopedDeclaration;\n } else {\n identifierRole = IdentifierRole.ObjectShorthandFunctionScopedDeclaration;\n }\n } else {\n identifierRole = IdentifierRole.ObjectShorthand;\n }\n state.tokens[state.tokens.length - 1].identifierRole = identifierRole;\n\n // Regardless of whether we know this to be a pattern or if we're in an ambiguous context, allow\n // parsing as if there's a default value.\n parseMaybeDefault(isBlockScope, true);\n}\n\nfunction parseObjPropValue(\n isPattern,\n isBlockScope,\n objectContextId,\n) {\n if (isTypeScriptEnabled) {\n tsStartParseObjPropValue();\n } else if (isFlowEnabled) {\n flowStartParseObjPropValue();\n }\n const wasMethod = parseObjectMethod(isPattern, objectContextId);\n if (!wasMethod) {\n parseObjectProperty(isPattern, isBlockScope);\n }\n}\n\nexport function parsePropertyName(objectContextId) {\n if (isFlowEnabled) {\n flowParseVariance();\n }\n if (eat(tt.bracketL)) {\n state.tokens[state.tokens.length - 1].contextId = objectContextId;\n parseMaybeAssign();\n expect(tt.bracketR);\n state.tokens[state.tokens.length - 1].contextId = objectContextId;\n } else {\n if (match(tt.num) || match(tt.string) || match(tt.bigint) || match(tt.decimal)) {\n parseExprAtom();\n } else {\n parseMaybePrivateName();\n }\n\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ObjectKey;\n state.tokens[state.tokens.length - 1].contextId = objectContextId;\n }\n}\n\n// Parse object or class method.\nexport function parseMethod(functionStart, isConstructor) {\n const funcContextId = getNextContextId();\n\n state.scopeDepth++;\n const startTokenIndex = state.tokens.length;\n const allowModifiers = isConstructor; // For TypeScript parameter properties\n parseFunctionParams(allowModifiers, funcContextId);\n parseFunctionBodyAndFinish(functionStart, funcContextId);\n const endTokenIndex = state.tokens.length;\n state.scopes.push(new Scope(startTokenIndex, endTokenIndex, true));\n state.scopeDepth--;\n}\n\n// Parse arrow function expression.\n// If the parameters are provided, they will be converted to an\n// assignable list.\nexport function parseArrowExpression(startTokenIndex) {\n parseFunctionBody(true);\n const endTokenIndex = state.tokens.length;\n state.scopes.push(new Scope(startTokenIndex, endTokenIndex, true));\n state.scopeDepth--;\n}\n\nexport function parseFunctionBodyAndFinish(functionStart, funcContextId = 0) {\n if (isTypeScriptEnabled) {\n tsParseFunctionBodyAndFinish(functionStart, funcContextId);\n } else if (isFlowEnabled) {\n flowParseFunctionBodyAndFinish(funcContextId);\n } else {\n parseFunctionBody(false, funcContextId);\n }\n}\n\nexport function parseFunctionBody(allowExpression, funcContextId = 0) {\n const isExpression = allowExpression && !match(tt.braceL);\n\n if (isExpression) {\n parseMaybeAssign();\n } else {\n parseBlock(true /* isFunctionScope */, funcContextId);\n }\n}\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\nfunction parseExprList(close, allowEmpty = false) {\n let first = true;\n while (!eat(close) && !state.error) {\n if (first) {\n first = false;\n } else {\n expect(tt.comma);\n if (eat(close)) break;\n }\n parseExprListItem(allowEmpty);\n }\n}\n\nfunction parseExprListItem(allowEmpty) {\n if (allowEmpty && match(tt.comma)) {\n // Empty item; nothing more to parse for this item.\n } else if (match(tt.ellipsis)) {\n parseSpread();\n parseParenItem();\n } else if (match(tt.question)) {\n // Partial function application proposal.\n next();\n } else {\n parseMaybeAssign(false, true);\n }\n}\n\n// Parse the next token as an identifier.\nexport function parseIdentifier() {\n next();\n state.tokens[state.tokens.length - 1].type = tt.name;\n}\n\n// Parses await expression inside async function.\nfunction parseAwait() {\n parseMaybeUnary();\n}\n\n// Parses yield expression inside generator.\nfunction parseYield() {\n next();\n if (!match(tt.semi) && !canInsertSemicolon()) {\n eat(tt.star);\n parseMaybeAssign();\n }\n}\n\n// https://github.com/tc39/proposal-js-module-blocks\nfunction parseModuleExpression() {\n expectContextual(ContextualKeyword._module);\n expect(tt.braceL);\n // For now, just call parseBlockBody to parse the block. In the future when we\n // implement full support, we'll want to emit scopes and possibly other\n // information.\n parseBlockBody(tt.braceR);\n}\n","/* eslint max-len: 0 */\n\nimport {\n eat,\n lookaheadType,\n lookaheadTypeAndKeyword,\n match,\n next,\n popTypeContext,\n pushTypeContext,\n\n} from \"../tokenizer/index\";\nimport {ContextualKeyword} from \"../tokenizer/keywords\";\nimport {TokenType, TokenType as tt} from \"../tokenizer/types\";\nimport {input, state} from \"../traverser/base\";\nimport {\n baseParseMaybeAssign,\n baseParseSubscript,\n baseParseSubscripts,\n parseArrow,\n parseArrowExpression,\n parseCallExpressionArguments,\n parseExprAtom,\n parseExpression,\n parseFunctionBody,\n parseIdentifier,\n parseLiteral,\n\n} from \"../traverser/expression\";\nimport {\n baseParseExportStar,\n parseExport,\n parseExportFrom,\n parseExportSpecifiers,\n parseFunctionParams,\n parseImport,\n parseStatement,\n} from \"../traverser/statement\";\nimport {\n canInsertSemicolon,\n eatContextual,\n expect,\n expectContextual,\n isContextual,\n isLookaheadContextual,\n semicolon,\n unexpected,\n} from \"../traverser/util\";\n\nfunction isMaybeDefaultImport(lookahead) {\n return (\n (lookahead.type === tt.name || !!(lookahead.type & TokenType.IS_KEYWORD)) &&\n lookahead.contextualKeyword !== ContextualKeyword._from\n );\n}\n\nfunction flowParseTypeInitialiser(tok) {\n const oldIsType = pushTypeContext(0);\n expect(tok || tt.colon);\n flowParseType();\n popTypeContext(oldIsType);\n}\n\nfunction flowParsePredicate() {\n expect(tt.modulo);\n expectContextual(ContextualKeyword._checks);\n if (eat(tt.parenL)) {\n parseExpression();\n expect(tt.parenR);\n }\n}\n\nfunction flowParseTypeAndPredicateInitialiser() {\n const oldIsType = pushTypeContext(0);\n expect(tt.colon);\n if (match(tt.modulo)) {\n flowParsePredicate();\n } else {\n flowParseType();\n if (match(tt.modulo)) {\n flowParsePredicate();\n }\n }\n popTypeContext(oldIsType);\n}\n\nfunction flowParseDeclareClass() {\n next();\n flowParseInterfaceish(/* isClass */ true);\n}\n\nfunction flowParseDeclareFunction() {\n next();\n parseIdentifier();\n\n if (match(tt.lessThan)) {\n flowParseTypeParameterDeclaration();\n }\n\n expect(tt.parenL);\n flowParseFunctionTypeParams();\n expect(tt.parenR);\n\n flowParseTypeAndPredicateInitialiser();\n\n semicolon();\n}\n\nfunction flowParseDeclare() {\n if (match(tt._class)) {\n flowParseDeclareClass();\n } else if (match(tt._function)) {\n flowParseDeclareFunction();\n } else if (match(tt._var)) {\n flowParseDeclareVariable();\n } else if (eatContextual(ContextualKeyword._module)) {\n if (eat(tt.dot)) {\n flowParseDeclareModuleExports();\n } else {\n flowParseDeclareModule();\n }\n } else if (isContextual(ContextualKeyword._type)) {\n flowParseDeclareTypeAlias();\n } else if (isContextual(ContextualKeyword._opaque)) {\n flowParseDeclareOpaqueType();\n } else if (isContextual(ContextualKeyword._interface)) {\n flowParseDeclareInterface();\n } else if (match(tt._export)) {\n flowParseDeclareExportDeclaration();\n } else {\n unexpected();\n }\n}\n\nfunction flowParseDeclareVariable() {\n next();\n flowParseTypeAnnotatableIdentifier();\n semicolon();\n}\n\nfunction flowParseDeclareModule() {\n if (match(tt.string)) {\n parseExprAtom();\n } else {\n parseIdentifier();\n }\n\n expect(tt.braceL);\n while (!match(tt.braceR) && !state.error) {\n if (match(tt._import)) {\n next();\n parseImport();\n } else {\n unexpected();\n }\n }\n expect(tt.braceR);\n}\n\nfunction flowParseDeclareExportDeclaration() {\n expect(tt._export);\n\n if (eat(tt._default)) {\n if (match(tt._function) || match(tt._class)) {\n // declare export default class ...\n // declare export default function ...\n flowParseDeclare();\n } else {\n // declare export default [type];\n flowParseType();\n semicolon();\n }\n } else if (\n match(tt._var) || // declare export var ...\n match(tt._function) || // declare export function ...\n match(tt._class) || // declare export class ...\n isContextual(ContextualKeyword._opaque) // declare export opaque ..\n ) {\n flowParseDeclare();\n } else if (\n match(tt.star) || // declare export * from ''\n match(tt.braceL) || // declare export {} ...\n isContextual(ContextualKeyword._interface) || // declare export interface ...\n isContextual(ContextualKeyword._type) || // declare export type ...\n isContextual(ContextualKeyword._opaque) // declare export opaque type ...\n ) {\n parseExport();\n } else {\n unexpected();\n }\n}\n\nfunction flowParseDeclareModuleExports() {\n expectContextual(ContextualKeyword._exports);\n flowParseTypeAnnotation();\n semicolon();\n}\n\nfunction flowParseDeclareTypeAlias() {\n next();\n flowParseTypeAlias();\n}\n\nfunction flowParseDeclareOpaqueType() {\n next();\n flowParseOpaqueType(true);\n}\n\nfunction flowParseDeclareInterface() {\n next();\n flowParseInterfaceish();\n}\n\n// Interfaces\n\nfunction flowParseInterfaceish(isClass = false) {\n flowParseRestrictedIdentifier();\n\n if (match(tt.lessThan)) {\n flowParseTypeParameterDeclaration();\n }\n\n if (eat(tt._extends)) {\n do {\n flowParseInterfaceExtends();\n } while (!isClass && eat(tt.comma));\n }\n\n if (isContextual(ContextualKeyword._mixins)) {\n next();\n do {\n flowParseInterfaceExtends();\n } while (eat(tt.comma));\n }\n\n if (isContextual(ContextualKeyword._implements)) {\n next();\n do {\n flowParseInterfaceExtends();\n } while (eat(tt.comma));\n }\n\n flowParseObjectType(isClass, false, isClass);\n}\n\nfunction flowParseInterfaceExtends() {\n flowParseQualifiedTypeIdentifier(false);\n if (match(tt.lessThan)) {\n flowParseTypeParameterInstantiation();\n }\n}\n\nfunction flowParseInterface() {\n flowParseInterfaceish();\n}\n\nfunction flowParseRestrictedIdentifier() {\n parseIdentifier();\n}\n\nfunction flowParseTypeAlias() {\n flowParseRestrictedIdentifier();\n\n if (match(tt.lessThan)) {\n flowParseTypeParameterDeclaration();\n }\n\n flowParseTypeInitialiser(tt.eq);\n semicolon();\n}\n\nfunction flowParseOpaqueType(declare) {\n expectContextual(ContextualKeyword._type);\n flowParseRestrictedIdentifier();\n\n if (match(tt.lessThan)) {\n flowParseTypeParameterDeclaration();\n }\n\n // Parse the supertype\n if (match(tt.colon)) {\n flowParseTypeInitialiser(tt.colon);\n }\n\n if (!declare) {\n flowParseTypeInitialiser(tt.eq);\n }\n semicolon();\n}\n\nfunction flowParseTypeParameter() {\n flowParseVariance();\n flowParseTypeAnnotatableIdentifier();\n\n if (eat(tt.eq)) {\n flowParseType();\n }\n}\n\nexport function flowParseTypeParameterDeclaration() {\n const oldIsType = pushTypeContext(0);\n // istanbul ignore else: this condition is already checked at all call sites\n if (match(tt.lessThan) || match(tt.typeParameterStart)) {\n next();\n } else {\n unexpected();\n }\n\n do {\n flowParseTypeParameter();\n if (!match(tt.greaterThan)) {\n expect(tt.comma);\n }\n } while (!match(tt.greaterThan) && !state.error);\n expect(tt.greaterThan);\n popTypeContext(oldIsType);\n}\n\nfunction flowParseTypeParameterInstantiation() {\n const oldIsType = pushTypeContext(0);\n expect(tt.lessThan);\n while (!match(tt.greaterThan) && !state.error) {\n flowParseType();\n if (!match(tt.greaterThan)) {\n expect(tt.comma);\n }\n }\n expect(tt.greaterThan);\n popTypeContext(oldIsType);\n}\n\nfunction flowParseInterfaceType() {\n expectContextual(ContextualKeyword._interface);\n if (eat(tt._extends)) {\n do {\n flowParseInterfaceExtends();\n } while (eat(tt.comma));\n }\n flowParseObjectType(false, false, false);\n}\n\nfunction flowParseObjectPropertyKey() {\n if (match(tt.num) || match(tt.string)) {\n parseExprAtom();\n } else {\n parseIdentifier();\n }\n}\n\nfunction flowParseObjectTypeIndexer() {\n // Note: bracketL has already been consumed\n if (lookaheadType() === tt.colon) {\n flowParseObjectPropertyKey();\n flowParseTypeInitialiser();\n } else {\n flowParseType();\n }\n expect(tt.bracketR);\n flowParseTypeInitialiser();\n}\n\nfunction flowParseObjectTypeInternalSlot() {\n // Note: both bracketL have already been consumed\n flowParseObjectPropertyKey();\n expect(tt.bracketR);\n expect(tt.bracketR);\n if (match(tt.lessThan) || match(tt.parenL)) {\n flowParseObjectTypeMethodish();\n } else {\n eat(tt.question);\n flowParseTypeInitialiser();\n }\n}\n\nfunction flowParseObjectTypeMethodish() {\n if (match(tt.lessThan)) {\n flowParseTypeParameterDeclaration();\n }\n\n expect(tt.parenL);\n while (!match(tt.parenR) && !match(tt.ellipsis) && !state.error) {\n flowParseFunctionTypeParam();\n if (!match(tt.parenR)) {\n expect(tt.comma);\n }\n }\n\n if (eat(tt.ellipsis)) {\n flowParseFunctionTypeParam();\n }\n expect(tt.parenR);\n flowParseTypeInitialiser();\n}\n\nfunction flowParseObjectTypeCallProperty() {\n flowParseObjectTypeMethodish();\n}\n\nfunction flowParseObjectType(allowStatic, allowExact, allowProto) {\n let endDelim;\n if (allowExact && match(tt.braceBarL)) {\n expect(tt.braceBarL);\n endDelim = tt.braceBarR;\n } else {\n expect(tt.braceL);\n endDelim = tt.braceR;\n }\n\n while (!match(endDelim) && !state.error) {\n if (allowProto && isContextual(ContextualKeyword._proto)) {\n const lookahead = lookaheadType();\n if (lookahead !== tt.colon && lookahead !== tt.question) {\n next();\n allowStatic = false;\n }\n }\n if (allowStatic && isContextual(ContextualKeyword._static)) {\n const lookahead = lookaheadType();\n if (lookahead !== tt.colon && lookahead !== tt.question) {\n next();\n }\n }\n\n flowParseVariance();\n\n if (eat(tt.bracketL)) {\n if (eat(tt.bracketL)) {\n flowParseObjectTypeInternalSlot();\n } else {\n flowParseObjectTypeIndexer();\n }\n } else if (match(tt.parenL) || match(tt.lessThan)) {\n flowParseObjectTypeCallProperty();\n } else {\n if (isContextual(ContextualKeyword._get) || isContextual(ContextualKeyword._set)) {\n const lookahead = lookaheadType();\n if (lookahead === tt.name || lookahead === tt.string || lookahead === tt.num) {\n next();\n }\n }\n\n flowParseObjectTypeProperty();\n }\n\n flowObjectTypeSemicolon();\n }\n\n expect(endDelim);\n}\n\nfunction flowParseObjectTypeProperty() {\n if (match(tt.ellipsis)) {\n expect(tt.ellipsis);\n if (!eat(tt.comma)) {\n eat(tt.semi);\n }\n // Explicit inexact object syntax.\n if (match(tt.braceR)) {\n return;\n }\n flowParseType();\n } else {\n flowParseObjectPropertyKey();\n if (match(tt.lessThan) || match(tt.parenL)) {\n // This is a method property\n flowParseObjectTypeMethodish();\n } else {\n eat(tt.question);\n flowParseTypeInitialiser();\n }\n }\n}\n\nfunction flowObjectTypeSemicolon() {\n if (!eat(tt.semi) && !eat(tt.comma) && !match(tt.braceR) && !match(tt.braceBarR)) {\n unexpected();\n }\n}\n\nfunction flowParseQualifiedTypeIdentifier(initialIdAlreadyParsed) {\n if (!initialIdAlreadyParsed) {\n parseIdentifier();\n }\n while (eat(tt.dot)) {\n parseIdentifier();\n }\n}\n\nfunction flowParseGenericType() {\n flowParseQualifiedTypeIdentifier(true);\n if (match(tt.lessThan)) {\n flowParseTypeParameterInstantiation();\n }\n}\n\nfunction flowParseTypeofType() {\n expect(tt._typeof);\n flowParsePrimaryType();\n}\n\nfunction flowParseTupleType() {\n expect(tt.bracketL);\n // We allow trailing commas\n while (state.pos < input.length && !match(tt.bracketR)) {\n flowParseType();\n if (match(tt.bracketR)) {\n break;\n }\n expect(tt.comma);\n }\n expect(tt.bracketR);\n}\n\nfunction flowParseFunctionTypeParam() {\n const lookahead = lookaheadType();\n if (lookahead === tt.colon || lookahead === tt.question) {\n parseIdentifier();\n eat(tt.question);\n flowParseTypeInitialiser();\n } else {\n flowParseType();\n }\n}\n\nfunction flowParseFunctionTypeParams() {\n while (!match(tt.parenR) && !match(tt.ellipsis) && !state.error) {\n flowParseFunctionTypeParam();\n if (!match(tt.parenR)) {\n expect(tt.comma);\n }\n }\n if (eat(tt.ellipsis)) {\n flowParseFunctionTypeParam();\n }\n}\n\n// The parsing of types roughly parallels the parsing of expressions, and\n// primary types are kind of like primary expressions...they're the\n// primitives with which other types are constructed.\nfunction flowParsePrimaryType() {\n let isGroupedType = false;\n const oldNoAnonFunctionType = state.noAnonFunctionType;\n\n switch (state.type) {\n case tt.name: {\n if (isContextual(ContextualKeyword._interface)) {\n flowParseInterfaceType();\n return;\n }\n parseIdentifier();\n flowParseGenericType();\n return;\n }\n\n case tt.braceL:\n flowParseObjectType(false, false, false);\n return;\n\n case tt.braceBarL:\n flowParseObjectType(false, true, false);\n return;\n\n case tt.bracketL:\n flowParseTupleType();\n return;\n\n case tt.lessThan:\n flowParseTypeParameterDeclaration();\n expect(tt.parenL);\n flowParseFunctionTypeParams();\n expect(tt.parenR);\n expect(tt.arrow);\n flowParseType();\n return;\n\n case tt.parenL:\n next();\n\n // Check to see if this is actually a grouped type\n if (!match(tt.parenR) && !match(tt.ellipsis)) {\n if (match(tt.name)) {\n const token = lookaheadType();\n isGroupedType = token !== tt.question && token !== tt.colon;\n } else {\n isGroupedType = true;\n }\n }\n\n if (isGroupedType) {\n state.noAnonFunctionType = false;\n flowParseType();\n state.noAnonFunctionType = oldNoAnonFunctionType;\n\n // A `,` or a `) =>` means this is an anonymous function type\n if (\n state.noAnonFunctionType ||\n !(match(tt.comma) || (match(tt.parenR) && lookaheadType() === tt.arrow))\n ) {\n expect(tt.parenR);\n return;\n } else {\n // Eat a comma if there is one\n eat(tt.comma);\n }\n }\n\n flowParseFunctionTypeParams();\n\n expect(tt.parenR);\n expect(tt.arrow);\n flowParseType();\n return;\n\n case tt.minus:\n next();\n parseLiteral();\n return;\n\n case tt.string:\n case tt.num:\n case tt._true:\n case tt._false:\n case tt._null:\n case tt._this:\n case tt._void:\n case tt.star:\n next();\n return;\n\n default:\n if (state.type === tt._typeof) {\n flowParseTypeofType();\n return;\n } else if (state.type & TokenType.IS_KEYWORD) {\n next();\n state.tokens[state.tokens.length - 1].type = tt.name;\n return;\n }\n }\n\n unexpected();\n}\n\nfunction flowParsePostfixType() {\n flowParsePrimaryType();\n while (!canInsertSemicolon() && (match(tt.bracketL) || match(tt.questionDot))) {\n eat(tt.questionDot);\n expect(tt.bracketL);\n if (eat(tt.bracketR)) {\n // Array type\n } else {\n // Indexed access type\n flowParseType();\n expect(tt.bracketR);\n }\n }\n}\n\nfunction flowParsePrefixType() {\n if (eat(tt.question)) {\n flowParsePrefixType();\n } else {\n flowParsePostfixType();\n }\n}\n\nfunction flowParseAnonFunctionWithoutParens() {\n flowParsePrefixType();\n if (!state.noAnonFunctionType && eat(tt.arrow)) {\n flowParseType();\n }\n}\n\nfunction flowParseIntersectionType() {\n eat(tt.bitwiseAND);\n flowParseAnonFunctionWithoutParens();\n while (eat(tt.bitwiseAND)) {\n flowParseAnonFunctionWithoutParens();\n }\n}\n\nfunction flowParseUnionType() {\n eat(tt.bitwiseOR);\n flowParseIntersectionType();\n while (eat(tt.bitwiseOR)) {\n flowParseIntersectionType();\n }\n}\n\nfunction flowParseType() {\n flowParseUnionType();\n}\n\nexport function flowParseTypeAnnotation() {\n flowParseTypeInitialiser();\n}\n\nfunction flowParseTypeAnnotatableIdentifier() {\n parseIdentifier();\n if (match(tt.colon)) {\n flowParseTypeAnnotation();\n }\n}\n\nexport function flowParseVariance() {\n if (match(tt.plus) || match(tt.minus)) {\n next();\n state.tokens[state.tokens.length - 1].isType = true;\n }\n}\n\n// ==================================\n// Overrides\n// ==================================\n\nexport function flowParseFunctionBodyAndFinish(funcContextId) {\n // For arrow functions, `parseArrow` handles the return type itself.\n if (match(tt.colon)) {\n flowParseTypeAndPredicateInitialiser();\n }\n\n parseFunctionBody(false, funcContextId);\n}\n\nexport function flowParseSubscript(\n startTokenIndex,\n noCalls,\n stopState,\n) {\n if (match(tt.questionDot) && lookaheadType() === tt.lessThan) {\n if (noCalls) {\n stopState.stop = true;\n return;\n }\n next();\n flowParseTypeParameterInstantiation();\n expect(tt.parenL);\n parseCallExpressionArguments();\n return;\n } else if (!noCalls && match(tt.lessThan)) {\n const snapshot = state.snapshot();\n flowParseTypeParameterInstantiation();\n expect(tt.parenL);\n parseCallExpressionArguments();\n if (state.error) {\n state.restoreFromSnapshot(snapshot);\n } else {\n return;\n }\n }\n baseParseSubscript(startTokenIndex, noCalls, stopState);\n}\n\nexport function flowStartParseNewArguments() {\n if (match(tt.lessThan)) {\n const snapshot = state.snapshot();\n flowParseTypeParameterInstantiation();\n if (state.error) {\n state.restoreFromSnapshot(snapshot);\n }\n }\n}\n\n// interfaces\nexport function flowTryParseStatement() {\n if (match(tt.name) && state.contextualKeyword === ContextualKeyword._interface) {\n const oldIsType = pushTypeContext(0);\n next();\n flowParseInterface();\n popTypeContext(oldIsType);\n return true;\n } else if (isContextual(ContextualKeyword._enum)) {\n flowParseEnumDeclaration();\n return true;\n }\n return false;\n}\n\nexport function flowTryParseExportDefaultExpression() {\n if (isContextual(ContextualKeyword._enum)) {\n flowParseEnumDeclaration();\n return true;\n }\n return false;\n}\n\n// declares, interfaces and type aliases\nexport function flowParseIdentifierStatement(contextualKeyword) {\n if (contextualKeyword === ContextualKeyword._declare) {\n if (\n match(tt._class) ||\n match(tt.name) ||\n match(tt._function) ||\n match(tt._var) ||\n match(tt._export)\n ) {\n const oldIsType = pushTypeContext(1);\n flowParseDeclare();\n popTypeContext(oldIsType);\n }\n } else if (match(tt.name)) {\n if (contextualKeyword === ContextualKeyword._interface) {\n const oldIsType = pushTypeContext(1);\n flowParseInterface();\n popTypeContext(oldIsType);\n } else if (contextualKeyword === ContextualKeyword._type) {\n const oldIsType = pushTypeContext(1);\n flowParseTypeAlias();\n popTypeContext(oldIsType);\n } else if (contextualKeyword === ContextualKeyword._opaque) {\n const oldIsType = pushTypeContext(1);\n flowParseOpaqueType(false);\n popTypeContext(oldIsType);\n }\n }\n semicolon();\n}\n\n// export type\nexport function flowShouldParseExportDeclaration() {\n return (\n isContextual(ContextualKeyword._type) ||\n isContextual(ContextualKeyword._interface) ||\n isContextual(ContextualKeyword._opaque) ||\n isContextual(ContextualKeyword._enum)\n );\n}\n\nexport function flowShouldDisallowExportDefaultSpecifier() {\n return (\n match(tt.name) &&\n (state.contextualKeyword === ContextualKeyword._type ||\n state.contextualKeyword === ContextualKeyword._interface ||\n state.contextualKeyword === ContextualKeyword._opaque ||\n state.contextualKeyword === ContextualKeyword._enum)\n );\n}\n\nexport function flowParseExportDeclaration() {\n if (isContextual(ContextualKeyword._type)) {\n const oldIsType = pushTypeContext(1);\n next();\n\n if (match(tt.braceL)) {\n // export type { foo, bar };\n parseExportSpecifiers();\n parseExportFrom();\n } else {\n // export type Foo = Bar;\n flowParseTypeAlias();\n }\n popTypeContext(oldIsType);\n } else if (isContextual(ContextualKeyword._opaque)) {\n const oldIsType = pushTypeContext(1);\n next();\n // export opaque type Foo = Bar;\n flowParseOpaqueType(false);\n popTypeContext(oldIsType);\n } else if (isContextual(ContextualKeyword._interface)) {\n const oldIsType = pushTypeContext(1);\n next();\n flowParseInterface();\n popTypeContext(oldIsType);\n } else {\n parseStatement(true);\n }\n}\n\nexport function flowShouldParseExportStar() {\n return match(tt.star) || (isContextual(ContextualKeyword._type) && lookaheadType() === tt.star);\n}\n\nexport function flowParseExportStar() {\n if (eatContextual(ContextualKeyword._type)) {\n const oldIsType = pushTypeContext(2);\n baseParseExportStar();\n popTypeContext(oldIsType);\n } else {\n baseParseExportStar();\n }\n}\n\n// parse a the super class type parameters and implements\nexport function flowAfterParseClassSuper(hasSuper) {\n if (hasSuper && match(tt.lessThan)) {\n flowParseTypeParameterInstantiation();\n }\n if (isContextual(ContextualKeyword._implements)) {\n const oldIsType = pushTypeContext(0);\n next();\n state.tokens[state.tokens.length - 1].type = tt._implements;\n do {\n flowParseRestrictedIdentifier();\n if (match(tt.lessThan)) {\n flowParseTypeParameterInstantiation();\n }\n } while (eat(tt.comma));\n popTypeContext(oldIsType);\n }\n}\n\n// parse type parameters for object method shorthand\nexport function flowStartParseObjPropValue() {\n // method shorthand\n if (match(tt.lessThan)) {\n flowParseTypeParameterDeclaration();\n if (!match(tt.parenL)) unexpected();\n }\n}\n\nexport function flowParseAssignableListItemTypes() {\n const oldIsType = pushTypeContext(0);\n eat(tt.question);\n if (match(tt.colon)) {\n flowParseTypeAnnotation();\n }\n popTypeContext(oldIsType);\n}\n\n// parse typeof and type imports\nexport function flowStartParseImportSpecifiers() {\n if (match(tt._typeof) || isContextual(ContextualKeyword._type)) {\n const lh = lookaheadTypeAndKeyword();\n if (isMaybeDefaultImport(lh) || lh.type === tt.braceL || lh.type === tt.star) {\n next();\n }\n }\n}\n\n// parse import-type/typeof shorthand\nexport function flowParseImportSpecifier() {\n const isTypeKeyword =\n state.contextualKeyword === ContextualKeyword._type || state.type === tt._typeof;\n if (isTypeKeyword) {\n next();\n } else {\n parseIdentifier();\n }\n\n if (isContextual(ContextualKeyword._as) && !isLookaheadContextual(ContextualKeyword._as)) {\n parseIdentifier();\n if (isTypeKeyword && !match(tt.name) && !(state.type & TokenType.IS_KEYWORD)) {\n // `import {type as ,` or `import {type as }`\n } else {\n // `import {type as foo`\n parseIdentifier();\n }\n } else {\n if (isTypeKeyword && (match(tt.name) || !!(state.type & TokenType.IS_KEYWORD))) {\n // `import {type foo`\n parseIdentifier();\n }\n if (eatContextual(ContextualKeyword._as)) {\n parseIdentifier();\n }\n }\n}\n\n// parse function type parameters - function foo<T>() {}\nexport function flowStartParseFunctionParams() {\n // Originally this checked if the method is a getter/setter, but if it was, we'd crash soon\n // anyway, so don't try to propagate that information.\n if (match(tt.lessThan)) {\n const oldIsType = pushTypeContext(0);\n flowParseTypeParameterDeclaration();\n popTypeContext(oldIsType);\n }\n}\n\n// parse flow type annotations on variable declarator heads - let foo: string = bar\nexport function flowAfterParseVarHead() {\n if (match(tt.colon)) {\n flowParseTypeAnnotation();\n }\n}\n\n// parse the return type of an async arrow function - let foo = (async (): number => {});\nexport function flowStartParseAsyncArrowFromCallExpression() {\n if (match(tt.colon)) {\n const oldNoAnonFunctionType = state.noAnonFunctionType;\n state.noAnonFunctionType = true;\n flowParseTypeAnnotation();\n state.noAnonFunctionType = oldNoAnonFunctionType;\n }\n}\n\n// We need to support type parameter declarations for arrow functions. This\n// is tricky. There are three situations we need to handle\n//\n// 1. This is either JSX or an arrow function. We'll try JSX first. If that\n// fails, we'll try an arrow function. If that fails, we'll throw the JSX\n// error.\n// 2. This is an arrow function. We'll parse the type parameter declaration,\n// parse the rest, make sure the rest is an arrow function, and go from\n// there\n// 3. This is neither. Just call the super method\nexport function flowParseMaybeAssign(noIn, isWithinParens) {\n if (match(tt.lessThan)) {\n const snapshot = state.snapshot();\n let wasArrow = baseParseMaybeAssign(noIn, isWithinParens);\n if (state.error) {\n state.restoreFromSnapshot(snapshot);\n state.type = tt.typeParameterStart;\n } else {\n return wasArrow;\n }\n\n const oldIsType = pushTypeContext(0);\n flowParseTypeParameterDeclaration();\n popTypeContext(oldIsType);\n wasArrow = baseParseMaybeAssign(noIn, isWithinParens);\n if (wasArrow) {\n return true;\n }\n unexpected();\n }\n\n return baseParseMaybeAssign(noIn, isWithinParens);\n}\n\n// handle return types for arrow functions\nexport function flowParseArrow() {\n if (match(tt.colon)) {\n const oldIsType = pushTypeContext(0);\n const snapshot = state.snapshot();\n\n const oldNoAnonFunctionType = state.noAnonFunctionType;\n state.noAnonFunctionType = true;\n flowParseTypeAndPredicateInitialiser();\n state.noAnonFunctionType = oldNoAnonFunctionType;\n\n if (canInsertSemicolon()) unexpected();\n if (!match(tt.arrow)) unexpected();\n\n if (state.error) {\n state.restoreFromSnapshot(snapshot);\n }\n popTypeContext(oldIsType);\n }\n return eat(tt.arrow);\n}\n\nexport function flowParseSubscripts(startTokenIndex, noCalls = false) {\n if (\n state.tokens[state.tokens.length - 1].contextualKeyword === ContextualKeyword._async &&\n match(tt.lessThan)\n ) {\n const snapshot = state.snapshot();\n const wasArrow = parseAsyncArrowWithTypeParameters();\n if (wasArrow && !state.error) {\n return;\n }\n state.restoreFromSnapshot(snapshot);\n }\n\n baseParseSubscripts(startTokenIndex, noCalls);\n}\n\n// Returns true if there was an arrow function here.\nfunction parseAsyncArrowWithTypeParameters() {\n state.scopeDepth++;\n const startTokenIndex = state.tokens.length;\n parseFunctionParams();\n if (!parseArrow()) {\n return false;\n }\n parseArrowExpression(startTokenIndex);\n return true;\n}\n\nfunction flowParseEnumDeclaration() {\n expectContextual(ContextualKeyword._enum);\n state.tokens[state.tokens.length - 1].type = tt._enum;\n parseIdentifier();\n flowParseEnumBody();\n}\n\nfunction flowParseEnumBody() {\n if (eatContextual(ContextualKeyword._of)) {\n next();\n }\n expect(tt.braceL);\n flowParseEnumMembers();\n expect(tt.braceR);\n}\n\nfunction flowParseEnumMembers() {\n while (!match(tt.braceR) && !state.error) {\n if (eat(tt.ellipsis)) {\n break;\n }\n flowParseEnumMember();\n if (!match(tt.braceR)) {\n expect(tt.comma);\n }\n }\n}\n\nfunction flowParseEnumMember() {\n parseIdentifier();\n if (eat(tt.eq)) {\n // Flow enum values are always just one token (a string, number, or boolean literal).\n next();\n }\n}\n","/* eslint max-len: 0 */\n\nimport {File} from \"../index\";\nimport {\n flowAfterParseClassSuper,\n flowAfterParseVarHead,\n flowParseExportDeclaration,\n flowParseExportStar,\n flowParseIdentifierStatement,\n flowParseImportSpecifier,\n flowParseTypeAnnotation,\n flowParseTypeParameterDeclaration,\n flowShouldDisallowExportDefaultSpecifier,\n flowShouldParseExportDeclaration,\n flowShouldParseExportStar,\n flowStartParseFunctionParams,\n flowStartParseImportSpecifiers,\n flowTryParseExportDefaultExpression,\n flowTryParseStatement,\n} from \"../plugins/flow\";\nimport {\n tsAfterParseClassSuper,\n tsAfterParseVarHead,\n tsIsDeclarationStart,\n tsParseExportDeclaration,\n tsParseExportSpecifier,\n tsParseIdentifierStatement,\n tsParseImportEqualsDeclaration,\n tsParseImportSpecifier,\n tsParseMaybeDecoratorArguments,\n tsParseModifiers,\n tsStartParseFunctionParams,\n tsTryParseClassMemberWithIsStatic,\n tsTryParseExport,\n tsTryParseExportDefaultExpression,\n tsTryParseStatementContent,\n tsTryParseTypeAnnotation,\n tsTryParseTypeParameters,\n} from \"../plugins/typescript\";\nimport {\n eat,\n eatTypeToken,\n IdentifierRole,\n lookaheadType,\n lookaheadTypeAndKeyword,\n match,\n next,\n nextTokenStart,\n nextTokenStartSince,\n popTypeContext,\n pushTypeContext,\n} from \"../tokenizer\";\nimport {ContextualKeyword} from \"../tokenizer/keywords\";\nimport {Scope} from \"../tokenizer/state\";\nimport { TokenType as tt} from \"../tokenizer/types\";\nimport {charCodes} from \"../util/charcodes\";\nimport {getNextContextId, input, isFlowEnabled, isTypeScriptEnabled, state} from \"./base\";\nimport {\n parseCallExpressionArguments,\n parseExprAtom,\n parseExpression,\n parseExprSubscripts,\n parseFunctionBodyAndFinish,\n parseIdentifier,\n parseMaybeAssign,\n parseMethod,\n parseObj,\n parseParenExpression,\n parsePropertyName,\n} from \"./expression\";\nimport {\n parseBindingAtom,\n parseBindingIdentifier,\n parseBindingList,\n parseImportedIdentifier,\n} from \"./lval\";\nimport {\n canInsertSemicolon,\n eatContextual,\n expect,\n expectContextual,\n hasFollowingLineBreak,\n hasPrecedingLineBreak,\n isContextual,\n isLineTerminator,\n isLookaheadContextual,\n semicolon,\n unexpected,\n} from \"./util\";\n\nexport function parseTopLevel() {\n parseBlockBody(tt.eof);\n state.scopes.push(new Scope(0, state.tokens.length, true));\n if (state.scopeDepth !== 0) {\n throw new Error(`Invalid scope depth at end of file: ${state.scopeDepth}`);\n }\n return new File(state.tokens, state.scopes);\n}\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\nexport function parseStatement(declaration) {\n if (isFlowEnabled) {\n if (flowTryParseStatement()) {\n return;\n }\n }\n if (match(tt.at)) {\n parseDecorators();\n }\n parseStatementContent(declaration);\n}\n\nfunction parseStatementContent(declaration) {\n if (isTypeScriptEnabled) {\n if (tsTryParseStatementContent()) {\n return;\n }\n }\n\n const starttype = state.type;\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case tt._break:\n case tt._continue:\n parseBreakContinueStatement();\n return;\n case tt._debugger:\n parseDebuggerStatement();\n return;\n case tt._do:\n parseDoStatement();\n return;\n case tt._for:\n parseForStatement();\n return;\n case tt._function:\n if (lookaheadType() === tt.dot) break;\n if (!declaration) unexpected();\n parseFunctionStatement();\n return;\n\n case tt._class:\n if (!declaration) unexpected();\n parseClass(true);\n return;\n\n case tt._if:\n parseIfStatement();\n return;\n case tt._return:\n parseReturnStatement();\n return;\n case tt._switch:\n parseSwitchStatement();\n return;\n case tt._throw:\n parseThrowStatement();\n return;\n case tt._try:\n parseTryStatement();\n return;\n\n case tt._let:\n case tt._const:\n if (!declaration) unexpected(); // NOTE: falls through to _var\n\n case tt._var:\n parseVarStatement(starttype !== tt._var);\n return;\n\n case tt._while:\n parseWhileStatement();\n return;\n case tt.braceL:\n parseBlock();\n return;\n case tt.semi:\n parseEmptyStatement();\n return;\n case tt._export:\n case tt._import: {\n const nextType = lookaheadType();\n if (nextType === tt.parenL || nextType === tt.dot) {\n break;\n }\n next();\n if (starttype === tt._import) {\n parseImport();\n } else {\n parseExport();\n }\n return;\n }\n case tt.name:\n if (state.contextualKeyword === ContextualKeyword._async) {\n const functionStart = state.start;\n // peek ahead and see if next token is a function\n const snapshot = state.snapshot();\n next();\n if (match(tt._function) && !canInsertSemicolon()) {\n expect(tt._function);\n parseFunction(functionStart, true);\n return;\n } else {\n state.restoreFromSnapshot(snapshot);\n }\n } else if (\n state.contextualKeyword === ContextualKeyword._using &&\n !hasFollowingLineBreak() &&\n // Statements like `using[0]` and `using in foo` aren't actual using\n // declarations.\n lookaheadType() === tt.name\n ) {\n parseVarStatement(true);\n return;\n } else if (startsAwaitUsing()) {\n expectContextual(ContextualKeyword._await);\n parseVarStatement(true);\n return;\n }\n default:\n // Do nothing.\n break;\n }\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n const initialTokensLength = state.tokens.length;\n parseExpression();\n let simpleName = null;\n if (state.tokens.length === initialTokensLength + 1) {\n const token = state.tokens[state.tokens.length - 1];\n if (token.type === tt.name) {\n simpleName = token.contextualKeyword;\n }\n }\n if (simpleName == null) {\n semicolon();\n return;\n }\n if (eat(tt.colon)) {\n parseLabeledStatement();\n } else {\n // This was an identifier, so we might want to handle flow/typescript-specific cases.\n parseIdentifierStatement(simpleName);\n }\n}\n\n/**\n * Determine if we're positioned at an `await using` declaration.\n *\n * Note that this can happen either in place of a regular variable declaration\n * or in a loop body, and in both places, there are similar-looking cases where\n * we need to return false.\n *\n * Examples returning true:\n * await using foo = bar();\n * for (await using a of b) {}\n *\n * Examples returning false:\n * await using\n * await using + 1\n * await using instanceof T\n * for (await using;;) {}\n *\n * For now, we early return if we don't see `await`, then do a simple\n * backtracking-based lookahead for the `using` and identifier tokens. In the\n * future, this could be optimized with a character-based approach.\n */\nfunction startsAwaitUsing() {\n if (!isContextual(ContextualKeyword._await)) {\n return false;\n }\n const snapshot = state.snapshot();\n // await\n next();\n if (!isContextual(ContextualKeyword._using) || hasPrecedingLineBreak()) {\n state.restoreFromSnapshot(snapshot);\n return false;\n }\n // using\n next();\n if (!match(tt.name) || hasPrecedingLineBreak()) {\n state.restoreFromSnapshot(snapshot);\n return false;\n }\n state.restoreFromSnapshot(snapshot);\n return true;\n}\n\nexport function parseDecorators() {\n while (match(tt.at)) {\n parseDecorator();\n }\n}\n\nfunction parseDecorator() {\n next();\n if (eat(tt.parenL)) {\n parseExpression();\n expect(tt.parenR);\n } else {\n parseIdentifier();\n while (eat(tt.dot)) {\n parseIdentifier();\n }\n parseMaybeDecoratorArguments();\n }\n}\n\nfunction parseMaybeDecoratorArguments() {\n if (isTypeScriptEnabled) {\n tsParseMaybeDecoratorArguments();\n } else {\n baseParseMaybeDecoratorArguments();\n }\n}\n\nexport function baseParseMaybeDecoratorArguments() {\n if (eat(tt.parenL)) {\n parseCallExpressionArguments();\n }\n}\n\nfunction parseBreakContinueStatement() {\n next();\n if (!isLineTerminator()) {\n parseIdentifier();\n semicolon();\n }\n}\n\nfunction parseDebuggerStatement() {\n next();\n semicolon();\n}\n\nfunction parseDoStatement() {\n next();\n parseStatement(false);\n expect(tt._while);\n parseParenExpression();\n eat(tt.semi);\n}\n\nfunction parseForStatement() {\n state.scopeDepth++;\n const startTokenIndex = state.tokens.length;\n parseAmbiguousForStatement();\n const endTokenIndex = state.tokens.length;\n state.scopes.push(new Scope(startTokenIndex, endTokenIndex, false));\n state.scopeDepth--;\n}\n\n/**\n * Determine if this token is a `using` declaration (explicit resource\n * management) as part of a loop.\n * https://github.com/tc39/proposal-explicit-resource-management\n */\nfunction isUsingInLoop() {\n if (!isContextual(ContextualKeyword._using)) {\n return false;\n }\n // This must be `for (using of`, where `using` is the name of the loop\n // variable.\n if (isLookaheadContextual(ContextualKeyword._of)) {\n return false;\n }\n return true;\n}\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\nfunction parseAmbiguousForStatement() {\n next();\n\n let forAwait = false;\n if (isContextual(ContextualKeyword._await)) {\n forAwait = true;\n next();\n }\n expect(tt.parenL);\n\n if (match(tt.semi)) {\n if (forAwait) {\n unexpected();\n }\n parseFor();\n return;\n }\n\n const isAwaitUsing = startsAwaitUsing();\n if (isAwaitUsing || match(tt._var) || match(tt._let) || match(tt._const) || isUsingInLoop()) {\n if (isAwaitUsing) {\n expectContextual(ContextualKeyword._await);\n }\n next();\n parseVar(true, state.type !== tt._var);\n if (match(tt._in) || isContextual(ContextualKeyword._of)) {\n parseForIn(forAwait);\n return;\n }\n parseFor();\n return;\n }\n\n parseExpression(true);\n if (match(tt._in) || isContextual(ContextualKeyword._of)) {\n parseForIn(forAwait);\n return;\n }\n if (forAwait) {\n unexpected();\n }\n parseFor();\n}\n\nfunction parseFunctionStatement() {\n const functionStart = state.start;\n next();\n parseFunction(functionStart, true);\n}\n\nfunction parseIfStatement() {\n next();\n parseParenExpression();\n parseStatement(false);\n if (eat(tt._else)) {\n parseStatement(false);\n }\n}\n\nfunction parseReturnStatement() {\n next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (!isLineTerminator()) {\n parseExpression();\n semicolon();\n }\n}\n\nfunction parseSwitchStatement() {\n next();\n parseParenExpression();\n state.scopeDepth++;\n const startTokenIndex = state.tokens.length;\n expect(tt.braceL);\n\n // Don't bother validation; just go through any sequence of cases, defaults, and statements.\n while (!match(tt.braceR) && !state.error) {\n if (match(tt._case) || match(tt._default)) {\n const isCase = match(tt._case);\n next();\n if (isCase) {\n parseExpression();\n }\n expect(tt.colon);\n } else {\n parseStatement(true);\n }\n }\n next(); // Closing brace\n const endTokenIndex = state.tokens.length;\n state.scopes.push(new Scope(startTokenIndex, endTokenIndex, false));\n state.scopeDepth--;\n}\n\nfunction parseThrowStatement() {\n next();\n parseExpression();\n semicolon();\n}\n\nfunction parseCatchClauseParam() {\n parseBindingAtom(true /* isBlockScope */);\n\n if (isTypeScriptEnabled) {\n tsTryParseTypeAnnotation();\n }\n}\n\nfunction parseTryStatement() {\n next();\n\n parseBlock();\n\n if (match(tt._catch)) {\n next();\n let catchBindingStartTokenIndex = null;\n if (match(tt.parenL)) {\n state.scopeDepth++;\n catchBindingStartTokenIndex = state.tokens.length;\n expect(tt.parenL);\n parseCatchClauseParam();\n expect(tt.parenR);\n }\n parseBlock();\n if (catchBindingStartTokenIndex != null) {\n // We need a special scope for the catch binding which includes the binding itself and the\n // catch block.\n const endTokenIndex = state.tokens.length;\n state.scopes.push(new Scope(catchBindingStartTokenIndex, endTokenIndex, false));\n state.scopeDepth--;\n }\n }\n if (eat(tt._finally)) {\n parseBlock();\n }\n}\n\nexport function parseVarStatement(isBlockScope) {\n next();\n parseVar(false, isBlockScope);\n semicolon();\n}\n\nfunction parseWhileStatement() {\n next();\n parseParenExpression();\n parseStatement(false);\n}\n\nfunction parseEmptyStatement() {\n next();\n}\n\nfunction parseLabeledStatement() {\n parseStatement(true);\n}\n\n/**\n * Parse a statement starting with an identifier of the given name. Subclasses match on the name\n * to handle statements like \"declare\".\n */\nfunction parseIdentifierStatement(contextualKeyword) {\n if (isTypeScriptEnabled) {\n tsParseIdentifierStatement(contextualKeyword);\n } else if (isFlowEnabled) {\n flowParseIdentifierStatement(contextualKeyword);\n } else {\n semicolon();\n }\n}\n\n// Parse a semicolon-enclosed block of statements.\nexport function parseBlock(isFunctionScope = false, contextId = 0) {\n const startTokenIndex = state.tokens.length;\n state.scopeDepth++;\n expect(tt.braceL);\n if (contextId) {\n state.tokens[state.tokens.length - 1].contextId = contextId;\n }\n parseBlockBody(tt.braceR);\n if (contextId) {\n state.tokens[state.tokens.length - 1].contextId = contextId;\n }\n const endTokenIndex = state.tokens.length;\n state.scopes.push(new Scope(startTokenIndex, endTokenIndex, isFunctionScope));\n state.scopeDepth--;\n}\n\nexport function parseBlockBody(end) {\n while (!eat(end) && !state.error) {\n parseStatement(true);\n }\n}\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\nfunction parseFor() {\n expect(tt.semi);\n if (!match(tt.semi)) {\n parseExpression();\n }\n expect(tt.semi);\n if (!match(tt.parenR)) {\n parseExpression();\n }\n expect(tt.parenR);\n parseStatement(false);\n}\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\nfunction parseForIn(forAwait) {\n if (forAwait) {\n eatContextual(ContextualKeyword._of);\n } else {\n next();\n }\n parseExpression();\n expect(tt.parenR);\n parseStatement(false);\n}\n\n// Parse a list of variable declarations.\n\nfunction parseVar(isFor, isBlockScope) {\n while (true) {\n parseVarHead(isBlockScope);\n if (eat(tt.eq)) {\n const eqIndex = state.tokens.length - 1;\n parseMaybeAssign(isFor);\n state.tokens[eqIndex].rhsEndIndex = state.tokens.length;\n }\n if (!eat(tt.comma)) {\n break;\n }\n }\n}\n\nfunction parseVarHead(isBlockScope) {\n parseBindingAtom(isBlockScope);\n if (isTypeScriptEnabled) {\n tsAfterParseVarHead();\n } else if (isFlowEnabled) {\n flowAfterParseVarHead();\n }\n}\n\n// Parse a function declaration or literal (depending on the\n// `isStatement` parameter).\n\nexport function parseFunction(\n functionStart,\n isStatement,\n optionalId = false,\n) {\n if (match(tt.star)) {\n next();\n }\n\n if (isStatement && !optionalId && !match(tt.name) && !match(tt._yield)) {\n unexpected();\n }\n\n let nameScopeStartTokenIndex = null;\n\n if (match(tt.name)) {\n // Expression-style functions should limit their name's scope to the function body, so we make\n // a new function scope to enforce that.\n if (!isStatement) {\n nameScopeStartTokenIndex = state.tokens.length;\n state.scopeDepth++;\n }\n parseBindingIdentifier(false);\n }\n\n const startTokenIndex = state.tokens.length;\n state.scopeDepth++;\n parseFunctionParams();\n parseFunctionBodyAndFinish(functionStart);\n const endTokenIndex = state.tokens.length;\n // In addition to the block scope of the function body, we need a separate function-style scope\n // that includes the params.\n state.scopes.push(new Scope(startTokenIndex, endTokenIndex, true));\n state.scopeDepth--;\n if (nameScopeStartTokenIndex !== null) {\n state.scopes.push(new Scope(nameScopeStartTokenIndex, endTokenIndex, true));\n state.scopeDepth--;\n }\n}\n\nexport function parseFunctionParams(\n allowModifiers = false,\n funcContextId = 0,\n) {\n if (isTypeScriptEnabled) {\n tsStartParseFunctionParams();\n } else if (isFlowEnabled) {\n flowStartParseFunctionParams();\n }\n\n expect(tt.parenL);\n if (funcContextId) {\n state.tokens[state.tokens.length - 1].contextId = funcContextId;\n }\n parseBindingList(\n tt.parenR,\n false /* isBlockScope */,\n false /* allowEmpty */,\n allowModifiers,\n funcContextId,\n );\n if (funcContextId) {\n state.tokens[state.tokens.length - 1].contextId = funcContextId;\n }\n}\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\nexport function parseClass(isStatement, optionalId = false) {\n // Put a context ID on the class keyword, the open-brace, and the close-brace, so that later\n // code can easily navigate to meaningful points on the class.\n const contextId = getNextContextId();\n\n next();\n state.tokens[state.tokens.length - 1].contextId = contextId;\n state.tokens[state.tokens.length - 1].isExpression = !isStatement;\n // Like with functions, we declare a special \"name scope\" from the start of the name to the end\n // of the class, but only with expression-style classes, to represent the fact that the name is\n // available to the body of the class but not an outer declaration.\n let nameScopeStartTokenIndex = null;\n if (!isStatement) {\n nameScopeStartTokenIndex = state.tokens.length;\n state.scopeDepth++;\n }\n parseClassId(isStatement, optionalId);\n parseClassSuper();\n const openBraceIndex = state.tokens.length;\n parseClassBody(contextId);\n if (state.error) {\n return;\n }\n state.tokens[openBraceIndex].contextId = contextId;\n state.tokens[state.tokens.length - 1].contextId = contextId;\n if (nameScopeStartTokenIndex !== null) {\n const endTokenIndex = state.tokens.length;\n state.scopes.push(new Scope(nameScopeStartTokenIndex, endTokenIndex, false));\n state.scopeDepth--;\n }\n}\n\nfunction isClassProperty() {\n return match(tt.eq) || match(tt.semi) || match(tt.braceR) || match(tt.bang) || match(tt.colon);\n}\n\nfunction isClassMethod() {\n return match(tt.parenL) || match(tt.lessThan);\n}\n\nfunction parseClassBody(classContextId) {\n expect(tt.braceL);\n\n while (!eat(tt.braceR) && !state.error) {\n if (eat(tt.semi)) {\n continue;\n }\n\n if (match(tt.at)) {\n parseDecorator();\n continue;\n }\n const memberStart = state.start;\n parseClassMember(memberStart, classContextId);\n }\n}\n\nfunction parseClassMember(memberStart, classContextId) {\n if (isTypeScriptEnabled) {\n tsParseModifiers([\n ContextualKeyword._declare,\n ContextualKeyword._public,\n ContextualKeyword._protected,\n ContextualKeyword._private,\n ContextualKeyword._override,\n ]);\n }\n let isStatic = false;\n if (match(tt.name) && state.contextualKeyword === ContextualKeyword._static) {\n parseIdentifier(); // eats 'static'\n if (isClassMethod()) {\n parseClassMethod(memberStart, /* isConstructor */ false);\n return;\n } else if (isClassProperty()) {\n parseClassProperty();\n return;\n }\n // otherwise something static\n state.tokens[state.tokens.length - 1].type = tt._static;\n isStatic = true;\n\n if (match(tt.braceL)) {\n // This is a static block. Mark the word \"static\" with the class context ID for class element\n // detection and parse as a regular block.\n state.tokens[state.tokens.length - 1].contextId = classContextId;\n parseBlock();\n return;\n }\n }\n\n parseClassMemberWithIsStatic(memberStart, isStatic, classContextId);\n}\n\nfunction parseClassMemberWithIsStatic(\n memberStart,\n isStatic,\n classContextId,\n) {\n if (isTypeScriptEnabled) {\n if (tsTryParseClassMemberWithIsStatic(isStatic)) {\n return;\n }\n }\n if (eat(tt.star)) {\n // a generator\n parseClassPropertyName(classContextId);\n parseClassMethod(memberStart, /* isConstructor */ false);\n return;\n }\n\n // Get the identifier name so we can tell if it's actually a keyword like \"async\", \"get\", or\n // \"set\".\n parseClassPropertyName(classContextId);\n let isConstructor = false;\n const token = state.tokens[state.tokens.length - 1];\n // We allow \"constructor\" as either an identifier or a string.\n if (token.contextualKeyword === ContextualKeyword._constructor) {\n isConstructor = true;\n }\n parsePostMemberNameModifiers();\n\n if (isClassMethod()) {\n parseClassMethod(memberStart, isConstructor);\n } else if (isClassProperty()) {\n parseClassProperty();\n } else if (token.contextualKeyword === ContextualKeyword._async && !isLineTerminator()) {\n state.tokens[state.tokens.length - 1].type = tt._async;\n // an async method\n const isGenerator = match(tt.star);\n if (isGenerator) {\n next();\n }\n\n // The so-called parsed name would have been \"async\": get the real name.\n parseClassPropertyName(classContextId);\n parsePostMemberNameModifiers();\n parseClassMethod(memberStart, false /* isConstructor */);\n } else if (\n (token.contextualKeyword === ContextualKeyword._get ||\n token.contextualKeyword === ContextualKeyword._set) &&\n !(isLineTerminator() && match(tt.star))\n ) {\n if (token.contextualKeyword === ContextualKeyword._get) {\n state.tokens[state.tokens.length - 1].type = tt._get;\n } else {\n state.tokens[state.tokens.length - 1].type = tt._set;\n }\n // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n // a getter or setter\n // The so-called parsed name would have been \"get/set\": get the real name.\n parseClassPropertyName(classContextId);\n parseClassMethod(memberStart, /* isConstructor */ false);\n } else if (token.contextualKeyword === ContextualKeyword._accessor && !isLineTerminator()) {\n parseClassPropertyName(classContextId);\n parseClassProperty();\n } else if (isLineTerminator()) {\n // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n parseClassProperty();\n } else {\n unexpected();\n }\n}\n\nfunction parseClassMethod(functionStart, isConstructor) {\n if (isTypeScriptEnabled) {\n tsTryParseTypeParameters();\n } else if (isFlowEnabled) {\n if (match(tt.lessThan)) {\n flowParseTypeParameterDeclaration();\n }\n }\n parseMethod(functionStart, isConstructor);\n}\n\n// Return the name of the class property, if it is a simple identifier.\nexport function parseClassPropertyName(classContextId) {\n parsePropertyName(classContextId);\n}\n\nexport function parsePostMemberNameModifiers() {\n if (isTypeScriptEnabled) {\n const oldIsType = pushTypeContext(0);\n eat(tt.question);\n popTypeContext(oldIsType);\n }\n}\n\nexport function parseClassProperty() {\n if (isTypeScriptEnabled) {\n eatTypeToken(tt.bang);\n tsTryParseTypeAnnotation();\n } else if (isFlowEnabled) {\n if (match(tt.colon)) {\n flowParseTypeAnnotation();\n }\n }\n\n if (match(tt.eq)) {\n const equalsTokenIndex = state.tokens.length;\n next();\n parseMaybeAssign();\n state.tokens[equalsTokenIndex].rhsEndIndex = state.tokens.length;\n }\n semicolon();\n}\n\nfunction parseClassId(isStatement, optionalId = false) {\n if (\n isTypeScriptEnabled &&\n (!isStatement || optionalId) &&\n isContextual(ContextualKeyword._implements)\n ) {\n return;\n }\n\n if (match(tt.name)) {\n parseBindingIdentifier(true);\n }\n\n if (isTypeScriptEnabled) {\n tsTryParseTypeParameters();\n } else if (isFlowEnabled) {\n if (match(tt.lessThan)) {\n flowParseTypeParameterDeclaration();\n }\n }\n}\n\n// Returns true if there was a superclass.\nfunction parseClassSuper() {\n let hasSuper = false;\n if (eat(tt._extends)) {\n parseExprSubscripts();\n hasSuper = true;\n } else {\n hasSuper = false;\n }\n if (isTypeScriptEnabled) {\n tsAfterParseClassSuper(hasSuper);\n } else if (isFlowEnabled) {\n flowAfterParseClassSuper(hasSuper);\n }\n}\n\n// Parses module export declaration.\n\nexport function parseExport() {\n const exportIndex = state.tokens.length - 1;\n if (isTypeScriptEnabled) {\n if (tsTryParseExport()) {\n return;\n }\n }\n // export * from '...'\n if (shouldParseExportStar()) {\n parseExportStar();\n } else if (isExportDefaultSpecifier()) {\n // export default from\n parseIdentifier();\n if (match(tt.comma) && lookaheadType() === tt.star) {\n expect(tt.comma);\n expect(tt.star);\n expectContextual(ContextualKeyword._as);\n parseIdentifier();\n } else {\n parseExportSpecifiersMaybe();\n }\n parseExportFrom();\n } else if (eat(tt._default)) {\n // export default ...\n parseExportDefaultExpression();\n } else if (shouldParseExportDeclaration()) {\n parseExportDeclaration();\n } else {\n // export { x, y as z } [from '...']\n parseExportSpecifiers();\n parseExportFrom();\n }\n state.tokens[exportIndex].rhsEndIndex = state.tokens.length;\n}\n\nfunction parseExportDefaultExpression() {\n if (isTypeScriptEnabled) {\n if (tsTryParseExportDefaultExpression()) {\n return;\n }\n }\n if (isFlowEnabled) {\n if (flowTryParseExportDefaultExpression()) {\n return;\n }\n }\n const functionStart = state.start;\n if (eat(tt._function)) {\n parseFunction(functionStart, true, true);\n } else if (isContextual(ContextualKeyword._async) && lookaheadType() === tt._function) {\n // async function declaration\n eatContextual(ContextualKeyword._async);\n eat(tt._function);\n parseFunction(functionStart, true, true);\n } else if (match(tt._class)) {\n parseClass(true, true);\n } else if (match(tt.at)) {\n parseDecorators();\n parseClass(true, true);\n } else {\n parseMaybeAssign();\n semicolon();\n }\n}\n\nfunction parseExportDeclaration() {\n if (isTypeScriptEnabled) {\n tsParseExportDeclaration();\n } else if (isFlowEnabled) {\n flowParseExportDeclaration();\n } else {\n parseStatement(true);\n }\n}\n\nfunction isExportDefaultSpecifier() {\n if (isTypeScriptEnabled && tsIsDeclarationStart()) {\n return false;\n } else if (isFlowEnabled && flowShouldDisallowExportDefaultSpecifier()) {\n return false;\n }\n if (match(tt.name)) {\n return state.contextualKeyword !== ContextualKeyword._async;\n }\n\n if (!match(tt._default)) {\n return false;\n }\n\n const _next = nextTokenStart();\n const lookahead = lookaheadTypeAndKeyword();\n const hasFrom =\n lookahead.type === tt.name && lookahead.contextualKeyword === ContextualKeyword._from;\n if (lookahead.type === tt.comma) {\n return true;\n }\n // lookahead again when `export default from` is seen\n if (hasFrom) {\n const nextAfterFrom = input.charCodeAt(nextTokenStartSince(_next + 4));\n return nextAfterFrom === charCodes.quotationMark || nextAfterFrom === charCodes.apostrophe;\n }\n return false;\n}\n\nfunction parseExportSpecifiersMaybe() {\n if (eat(tt.comma)) {\n parseExportSpecifiers();\n }\n}\n\nexport function parseExportFrom() {\n if (eatContextual(ContextualKeyword._from)) {\n parseExprAtom();\n maybeParseImportAttributes();\n }\n semicolon();\n}\n\nfunction shouldParseExportStar() {\n if (isFlowEnabled) {\n return flowShouldParseExportStar();\n } else {\n return match(tt.star);\n }\n}\n\nfunction parseExportStar() {\n if (isFlowEnabled) {\n flowParseExportStar();\n } else {\n baseParseExportStar();\n }\n}\n\nexport function baseParseExportStar() {\n expect(tt.star);\n\n if (isContextual(ContextualKeyword._as)) {\n parseExportNamespace();\n } else {\n parseExportFrom();\n }\n}\n\nfunction parseExportNamespace() {\n next();\n state.tokens[state.tokens.length - 1].type = tt._as;\n parseIdentifier();\n parseExportSpecifiersMaybe();\n parseExportFrom();\n}\n\nfunction shouldParseExportDeclaration() {\n return (\n (isTypeScriptEnabled && tsIsDeclarationStart()) ||\n (isFlowEnabled && flowShouldParseExportDeclaration()) ||\n state.type === tt._var ||\n state.type === tt._const ||\n state.type === tt._let ||\n state.type === tt._function ||\n state.type === tt._class ||\n isContextual(ContextualKeyword._async) ||\n match(tt.at)\n );\n}\n\n// Parses a comma-separated list of module exports.\nexport function parseExportSpecifiers() {\n let first = true;\n\n // export { x, y as z } [from '...']\n expect(tt.braceL);\n\n while (!eat(tt.braceR) && !state.error) {\n if (first) {\n first = false;\n } else {\n expect(tt.comma);\n if (eat(tt.braceR)) {\n break;\n }\n }\n parseExportSpecifier();\n }\n}\n\nfunction parseExportSpecifier() {\n if (isTypeScriptEnabled) {\n tsParseExportSpecifier();\n return;\n }\n parseIdentifier();\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ExportAccess;\n if (eatContextual(ContextualKeyword._as)) {\n parseIdentifier();\n }\n}\n\n/**\n * Starting at the `module` token in an import, determine if it was truly an\n * import reflection token or just looks like one.\n *\n * Returns true for:\n * import module foo from \"foo\";\n * import module from from \"foo\";\n *\n * Returns false for:\n * import module from \"foo\";\n * import module, {bar} from \"foo\";\n */\nfunction isImportReflection() {\n const snapshot = state.snapshot();\n expectContextual(ContextualKeyword._module);\n if (eatContextual(ContextualKeyword._from)) {\n if (isContextual(ContextualKeyword._from)) {\n state.restoreFromSnapshot(snapshot);\n return true;\n } else {\n state.restoreFromSnapshot(snapshot);\n return false;\n }\n } else if (match(tt.comma)) {\n state.restoreFromSnapshot(snapshot);\n return false;\n } else {\n state.restoreFromSnapshot(snapshot);\n return true;\n }\n}\n\n/**\n * Eat the \"module\" token from the import reflection proposal.\n * https://github.com/tc39/proposal-import-reflection\n */\nfunction parseMaybeImportReflection() {\n // isImportReflection does snapshot/restore, so only run it if we see the word\n // \"module\".\n if (isContextual(ContextualKeyword._module) && isImportReflection()) {\n next();\n }\n}\n\n// Parses import declaration.\n\nexport function parseImport() {\n if (isTypeScriptEnabled && match(tt.name) && lookaheadType() === tt.eq) {\n tsParseImportEqualsDeclaration();\n return;\n }\n if (isTypeScriptEnabled && isContextual(ContextualKeyword._type)) {\n const lookahead = lookaheadTypeAndKeyword();\n if (lookahead.type === tt.name && lookahead.contextualKeyword !== ContextualKeyword._from) {\n // One of these `import type` cases:\n // import type T = require('T');\n // import type A from 'A';\n expectContextual(ContextualKeyword._type);\n if (lookaheadType() === tt.eq) {\n tsParseImportEqualsDeclaration();\n return;\n }\n // If this is an `import type...from` statement, then we already ate the\n // type token, so proceed to the regular import parser.\n } else if (lookahead.type === tt.star || lookahead.type === tt.braceL) {\n // One of these `import type` cases, in which case we can eat the type token\n // and proceed as normal:\n // import type * as A from 'A';\n // import type {a} from 'A';\n expectContextual(ContextualKeyword._type);\n }\n // Otherwise, we are importing the name \"type\".\n }\n\n // import '...'\n if (match(tt.string)) {\n parseExprAtom();\n } else {\n parseMaybeImportReflection();\n parseImportSpecifiers();\n expectContextual(ContextualKeyword._from);\n parseExprAtom();\n }\n maybeParseImportAttributes();\n semicolon();\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction shouldParseDefaultImport() {\n return match(tt.name);\n}\n\nfunction parseImportSpecifierLocal() {\n parseImportedIdentifier();\n}\n\n// Parses a comma-separated list of module imports.\nfunction parseImportSpecifiers() {\n if (isFlowEnabled) {\n flowStartParseImportSpecifiers();\n }\n\n let first = true;\n if (shouldParseDefaultImport()) {\n // import defaultObj, { x, y as z } from '...'\n parseImportSpecifierLocal();\n\n if (!eat(tt.comma)) return;\n }\n\n if (match(tt.star)) {\n next();\n expectContextual(ContextualKeyword._as);\n\n parseImportSpecifierLocal();\n\n return;\n }\n\n expect(tt.braceL);\n while (!eat(tt.braceR) && !state.error) {\n if (first) {\n first = false;\n } else {\n // Detect an attempt to deep destructure\n if (eat(tt.colon)) {\n unexpected(\n \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n );\n }\n\n expect(tt.comma);\n if (eat(tt.braceR)) {\n break;\n }\n }\n\n parseImportSpecifier();\n }\n}\n\nfunction parseImportSpecifier() {\n if (isTypeScriptEnabled) {\n tsParseImportSpecifier();\n return;\n }\n if (isFlowEnabled) {\n flowParseImportSpecifier();\n return;\n }\n parseImportedIdentifier();\n if (isContextual(ContextualKeyword._as)) {\n state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportAccess;\n next();\n parseImportedIdentifier();\n }\n}\n\n/**\n * Parse import attributes like `with {type: \"json\"}`, or the legacy form\n * `assert {type: \"json\"}`.\n *\n * Import attributes technically have their own syntax, but are always parseable\n * as a plain JS object, so just do that for simplicity.\n */\nfunction maybeParseImportAttributes() {\n if (match(tt._with) || (isContextual(ContextualKeyword._assert) && !hasPrecedingLineBreak())) {\n next();\n parseObj(false, false);\n }\n}\n","\nimport {nextToken, skipLineComment} from \"../tokenizer/index\";\nimport {charCodes} from \"../util/charcodes\";\nimport {input, state} from \"./base\";\nimport {parseTopLevel} from \"./statement\";\n\nexport function parseFile() {\n // If enabled, skip leading hashbang line.\n if (\n state.pos === 0 &&\n input.charCodeAt(0) === charCodes.numberSign &&\n input.charCodeAt(1) === charCodes.exclamationMark\n ) {\n skipLineComment(2);\n }\n nextToken();\n return parseTopLevel();\n}\n","\n\nimport {augmentError, initParser, state} from \"./traverser/base\";\nimport {parseFile} from \"./traverser/index\";\n\nexport class File {\n \n \n\n constructor(tokens, scopes) {\n this.tokens = tokens;\n this.scopes = scopes;\n }\n}\n\nexport function parse(\n input,\n isJSXEnabled,\n isTypeScriptEnabled,\n isFlowEnabled,\n) {\n if (isFlowEnabled && isTypeScriptEnabled) {\n throw new Error(\"Cannot combine flow and typescript plugins.\");\n }\n initParser(input, isJSXEnabled, isTypeScriptEnabled, isFlowEnabled);\n const result = parseFile();\n if (state.error) {\n throw augmentError(state.error);\n }\n return result;\n}\n","import {ContextualKeyword} from \"../parser/tokenizer/keywords\";\n\n\n/**\n * Determine whether this optional chain or nullish coalescing operation has any await statements in\n * it. If so, we'll need to transpile to an async operation.\n *\n * We compute this by walking the length of the operation and returning true if we see an await\n * keyword used as a real await (rather than an object key or property access). Nested optional\n * chain/nullish operations need to be tracked but don't silence await, but a nested async function\n * (or any other nested scope) will make the await not count.\n */\nexport default function isAsyncOperation(tokens) {\n let index = tokens.currentIndex();\n let depth = 0;\n const startToken = tokens.currentToken();\n do {\n const token = tokens.tokens[index];\n if (token.isOptionalChainStart) {\n depth++;\n }\n if (token.isOptionalChainEnd) {\n depth--;\n }\n depth += token.numNullishCoalesceStarts;\n depth -= token.numNullishCoalesceEnds;\n\n if (\n token.contextualKeyword === ContextualKeyword._await &&\n token.identifierRole == null &&\n token.scopeDepth === startToken.scopeDepth\n ) {\n return true;\n }\n index += 1;\n } while (depth > 0 && index < tokens.tokens.length);\n return false;\n}\n","\n\n\nimport { TokenType as tt} from \"./parser/tokenizer/types\";\nimport isAsyncOperation from \"./util/isAsyncOperation\";\n\n\n\n\n\n\n\n\n\n\n\nexport default class TokenProcessor {\n __init() {this.resultCode = \"\"}\n // Array mapping input token index to optional string index position in the\n // output code.\n __init2() {this.resultMappings = new Array(this.tokens.length)}\n __init3() {this.tokenIndex = 0}\n\n constructor(\n code,\n tokens,\n isFlowEnabled,\n disableESTransforms,\n helperManager,\n ) {;this.code = code;this.tokens = tokens;this.isFlowEnabled = isFlowEnabled;this.disableESTransforms = disableESTransforms;this.helperManager = helperManager;TokenProcessor.prototype.__init.call(this);TokenProcessor.prototype.__init2.call(this);TokenProcessor.prototype.__init3.call(this);}\n\n /**\n * Snapshot the token state in a way that can be restored later, useful for\n * things like lookahead.\n *\n * resultMappings do not need to be copied since in all use cases, they will\n * be overwritten anyway after restore.\n */\n snapshot() {\n return {\n resultCode: this.resultCode,\n tokenIndex: this.tokenIndex,\n };\n }\n\n restoreToSnapshot(snapshot) {\n this.resultCode = snapshot.resultCode;\n this.tokenIndex = snapshot.tokenIndex;\n }\n\n /**\n * Remove and return the code generated since the snapshot, leaving the\n * current token position in-place. Unlike most TokenProcessor operations,\n * this operation can result in input/output line number mismatches because\n * the removed code may contain newlines, so this operation should be used\n * sparingly.\n */\n dangerouslyGetAndRemoveCodeSinceSnapshot(snapshot) {\n const result = this.resultCode.slice(snapshot.resultCode.length);\n this.resultCode = snapshot.resultCode;\n return result;\n }\n\n reset() {\n this.resultCode = \"\";\n this.resultMappings = new Array(this.tokens.length);\n this.tokenIndex = 0;\n }\n\n matchesContextualAtIndex(index, contextualKeyword) {\n return (\n this.matches1AtIndex(index, tt.name) &&\n this.tokens[index].contextualKeyword === contextualKeyword\n );\n }\n\n identifierNameAtIndex(index) {\n // TODO: We need to process escapes since technically you can have unicode escapes in variable\n // names.\n return this.identifierNameForToken(this.tokens[index]);\n }\n\n identifierNameAtRelativeIndex(relativeIndex) {\n return this.identifierNameForToken(this.tokenAtRelativeIndex(relativeIndex));\n }\n\n identifierName() {\n return this.identifierNameForToken(this.currentToken());\n }\n\n identifierNameForToken(token) {\n return this.code.slice(token.start, token.end);\n }\n\n rawCodeForToken(token) {\n return this.code.slice(token.start, token.end);\n }\n\n stringValueAtIndex(index) {\n return this.stringValueForToken(this.tokens[index]);\n }\n\n stringValue() {\n return this.stringValueForToken(this.currentToken());\n }\n\n stringValueForToken(token) {\n // This is used to identify when two imports are the same and to resolve TypeScript enum keys.\n // Ideally we'd process escapes within the strings, but for now we pretty much take the raw\n // code.\n return this.code.slice(token.start + 1, token.end - 1);\n }\n\n matches1AtIndex(index, t1) {\n return this.tokens[index].type === t1;\n }\n\n matches2AtIndex(index, t1, t2) {\n return this.tokens[index].type === t1 && this.tokens[index + 1].type === t2;\n }\n\n matches3AtIndex(index, t1, t2, t3) {\n return (\n this.tokens[index].type === t1 &&\n this.tokens[index + 1].type === t2 &&\n this.tokens[index + 2].type === t3\n );\n }\n\n matches1(t1) {\n return this.tokens[this.tokenIndex].type === t1;\n }\n\n matches2(t1, t2) {\n return this.tokens[this.tokenIndex].type === t1 && this.tokens[this.tokenIndex + 1].type === t2;\n }\n\n matches3(t1, t2, t3) {\n return (\n this.tokens[this.tokenIndex].type === t1 &&\n this.tokens[this.tokenIndex + 1].type === t2 &&\n this.tokens[this.tokenIndex + 2].type === t3\n );\n }\n\n matches4(t1, t2, t3, t4) {\n return (\n this.tokens[this.tokenIndex].type === t1 &&\n this.tokens[this.tokenIndex + 1].type === t2 &&\n this.tokens[this.tokenIndex + 2].type === t3 &&\n this.tokens[this.tokenIndex + 3].type === t4\n );\n }\n\n matches5(t1, t2, t3, t4, t5) {\n return (\n this.tokens[this.tokenIndex].type === t1 &&\n this.tokens[this.tokenIndex + 1].type === t2 &&\n this.tokens[this.tokenIndex + 2].type === t3 &&\n this.tokens[this.tokenIndex + 3].type === t4 &&\n this.tokens[this.tokenIndex + 4].type === t5\n );\n }\n\n matchesContextual(contextualKeyword) {\n return this.matchesContextualAtIndex(this.tokenIndex, contextualKeyword);\n }\n\n matchesContextIdAndLabel(type, contextId) {\n return this.matches1(type) && this.currentToken().contextId === contextId;\n }\n\n previousWhitespaceAndComments() {\n let whitespaceAndComments = this.code.slice(\n this.tokenIndex > 0 ? this.tokens[this.tokenIndex - 1].end : 0,\n this.tokenIndex < this.tokens.length ? this.tokens[this.tokenIndex].start : this.code.length,\n );\n if (this.isFlowEnabled) {\n whitespaceAndComments = whitespaceAndComments.replace(/@flow/g, \"\");\n }\n return whitespaceAndComments;\n }\n\n replaceToken(newCode) {\n this.resultCode += this.previousWhitespaceAndComments();\n this.appendTokenPrefix();\n this.resultMappings[this.tokenIndex] = this.resultCode.length;\n this.resultCode += newCode;\n this.appendTokenSuffix();\n this.tokenIndex++;\n }\n\n replaceTokenTrimmingLeftWhitespace(newCode) {\n this.resultCode += this.previousWhitespaceAndComments().replace(/[^\\r\\n]/g, \"\");\n this.appendTokenPrefix();\n this.resultMappings[this.tokenIndex] = this.resultCode.length;\n this.resultCode += newCode;\n this.appendTokenSuffix();\n this.tokenIndex++;\n }\n\n removeInitialToken() {\n this.replaceToken(\"\");\n }\n\n removeToken() {\n this.replaceTokenTrimmingLeftWhitespace(\"\");\n }\n\n /**\n * Remove all code until the next }, accounting for balanced braces.\n */\n removeBalancedCode() {\n let braceDepth = 0;\n while (!this.isAtEnd()) {\n if (this.matches1(tt.braceL)) {\n braceDepth++;\n } else if (this.matches1(tt.braceR)) {\n if (braceDepth === 0) {\n return;\n }\n braceDepth--;\n }\n this.removeToken();\n }\n }\n\n copyExpectedToken(tokenType) {\n if (this.tokens[this.tokenIndex].type !== tokenType) {\n throw new Error(`Expected token ${tokenType}`);\n }\n this.copyToken();\n }\n\n copyToken() {\n this.resultCode += this.previousWhitespaceAndComments();\n this.appendTokenPrefix();\n this.resultMappings[this.tokenIndex] = this.resultCode.length;\n this.resultCode += this.code.slice(\n this.tokens[this.tokenIndex].start,\n this.tokens[this.tokenIndex].end,\n );\n this.appendTokenSuffix();\n this.tokenIndex++;\n }\n\n copyTokenWithPrefix(prefix) {\n this.resultCode += this.previousWhitespaceAndComments();\n this.appendTokenPrefix();\n this.resultCode += prefix;\n this.resultMappings[this.tokenIndex] = this.resultCode.length;\n this.resultCode += this.code.slice(\n this.tokens[this.tokenIndex].start,\n this.tokens[this.tokenIndex].end,\n );\n this.appendTokenSuffix();\n this.tokenIndex++;\n }\n\n appendTokenPrefix() {\n const token = this.currentToken();\n if (token.numNullishCoalesceStarts || token.isOptionalChainStart) {\n token.isAsyncOperation = isAsyncOperation(this);\n }\n if (this.disableESTransforms) {\n return;\n }\n if (token.numNullishCoalesceStarts) {\n for (let i = 0; i < token.numNullishCoalesceStarts; i++) {\n if (token.isAsyncOperation) {\n this.resultCode += \"await \";\n this.resultCode += this.helperManager.getHelperName(\"asyncNullishCoalesce\");\n } else {\n this.resultCode += this.helperManager.getHelperName(\"nullishCoalesce\");\n }\n this.resultCode += \"(\";\n }\n }\n if (token.isOptionalChainStart) {\n if (token.isAsyncOperation) {\n this.resultCode += \"await \";\n }\n if (this.tokenIndex > 0 && this.tokenAtRelativeIndex(-1).type === tt._delete) {\n if (token.isAsyncOperation) {\n this.resultCode += this.helperManager.getHelperName(\"asyncOptionalChainDelete\");\n } else {\n this.resultCode += this.helperManager.getHelperName(\"optionalChainDelete\");\n }\n } else if (token.isAsyncOperation) {\n this.resultCode += this.helperManager.getHelperName(\"asyncOptionalChain\");\n } else {\n this.resultCode += this.helperManager.getHelperName(\"optionalChain\");\n }\n this.resultCode += \"([\";\n }\n }\n\n appendTokenSuffix() {\n const token = this.currentToken();\n if (token.isOptionalChainEnd && !this.disableESTransforms) {\n this.resultCode += \"])\";\n }\n if (token.numNullishCoalesceEnds && !this.disableESTransforms) {\n for (let i = 0; i < token.numNullishCoalesceEnds; i++) {\n this.resultCode += \"))\";\n }\n }\n }\n\n appendCode(code) {\n this.resultCode += code;\n }\n\n currentToken() {\n return this.tokens[this.tokenIndex];\n }\n\n currentTokenCode() {\n const token = this.currentToken();\n return this.code.slice(token.start, token.end);\n }\n\n tokenAtRelativeIndex(relativeIndex) {\n return this.tokens[this.tokenIndex + relativeIndex];\n }\n\n currentIndex() {\n return this.tokenIndex;\n }\n\n /**\n * Move to the next token. Only suitable in preprocessing steps. When\n * generating new code, you should use copyToken or removeToken.\n */\n nextToken() {\n if (this.tokenIndex === this.tokens.length) {\n throw new Error(\"Unexpectedly reached end of input.\");\n }\n this.tokenIndex++;\n }\n\n previousToken() {\n this.tokenIndex--;\n }\n\n finish() {\n if (this.tokenIndex !== this.tokens.length) {\n throw new Error(\"Tried to finish processing tokens before reaching the end.\");\n }\n this.resultCode += this.previousWhitespaceAndComments();\n return {code: this.resultCode, mappings: this.resultMappings};\n }\n\n isAtEnd() {\n return this.tokenIndex === this.tokens.length;\n }\n}\n","\n\nimport {ContextualKeyword} from \"../parser/tokenizer/keywords\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Get information about the class fields for this class, given a token processor pointing to the\n * open-brace at the start of the class.\n */\nexport default function getClassInfo(\n rootTransformer,\n tokens,\n nameManager,\n disableESTransforms,\n) {\n const snapshot = tokens.snapshot();\n\n const headerInfo = processClassHeader(tokens);\n\n let constructorInitializerStatements = [];\n const instanceInitializerNames = [];\n const staticInitializerNames = [];\n let constructorInsertPos = null;\n const fields = [];\n const rangesToRemove = [];\n\n const classContextId = tokens.currentToken().contextId;\n if (classContextId == null) {\n throw new Error(\"Expected non-null class context ID on class open-brace.\");\n }\n\n tokens.nextToken();\n while (!tokens.matchesContextIdAndLabel(tt.braceR, classContextId)) {\n if (tokens.matchesContextual(ContextualKeyword._constructor) && !tokens.currentToken().isType) {\n ({constructorInitializerStatements, constructorInsertPos} = processConstructor(tokens));\n } else if (tokens.matches1(tt.semi)) {\n if (!disableESTransforms) {\n rangesToRemove.push({start: tokens.currentIndex(), end: tokens.currentIndex() + 1});\n }\n tokens.nextToken();\n } else if (tokens.currentToken().isType) {\n tokens.nextToken();\n } else {\n // Either a method or a field. Skip to the identifier part.\n const statementStartIndex = tokens.currentIndex();\n let isStatic = false;\n let isESPrivate = false;\n let isDeclareOrAbstract = false;\n while (isAccessModifier(tokens.currentToken())) {\n if (tokens.matches1(tt._static)) {\n isStatic = true;\n }\n if (tokens.matches1(tt.hash)) {\n isESPrivate = true;\n }\n if (tokens.matches1(tt._declare) || tokens.matches1(tt._abstract)) {\n isDeclareOrAbstract = true;\n }\n tokens.nextToken();\n }\n if (isStatic && tokens.matches1(tt.braceL)) {\n // This is a static block, so don't process it in any special way.\n skipToNextClassElement(tokens, classContextId);\n continue;\n }\n if (isESPrivate) {\n // Sucrase doesn't attempt to transpile private fields; just leave them as-is.\n skipToNextClassElement(tokens, classContextId);\n continue;\n }\n if (\n tokens.matchesContextual(ContextualKeyword._constructor) &&\n !tokens.currentToken().isType\n ) {\n ({constructorInitializerStatements, constructorInsertPos} = processConstructor(tokens));\n continue;\n }\n\n const nameStartIndex = tokens.currentIndex();\n skipFieldName(tokens);\n if (tokens.matches1(tt.lessThan) || tokens.matches1(tt.parenL)) {\n // This is a method, so nothing to process.\n skipToNextClassElement(tokens, classContextId);\n continue;\n }\n // There might be a type annotation that we need to skip.\n while (tokens.currentToken().isType) {\n tokens.nextToken();\n }\n if (tokens.matches1(tt.eq)) {\n const equalsIndex = tokens.currentIndex();\n // This is an initializer, so we need to wrap in an initializer method.\n const valueEnd = tokens.currentToken().rhsEndIndex;\n if (valueEnd == null) {\n throw new Error(\"Expected rhsEndIndex on class field assignment.\");\n }\n tokens.nextToken();\n while (tokens.currentIndex() < valueEnd) {\n rootTransformer.processToken();\n }\n let initializerName;\n if (isStatic) {\n initializerName = nameManager.claimFreeName(\"__initStatic\");\n staticInitializerNames.push(initializerName);\n } else {\n initializerName = nameManager.claimFreeName(\"__init\");\n instanceInitializerNames.push(initializerName);\n }\n // Fields start at the name, so `static x = 1;` has a field range of `x = 1;`.\n fields.push({\n initializerName,\n equalsIndex,\n start: nameStartIndex,\n end: tokens.currentIndex(),\n });\n } else if (!disableESTransforms || isDeclareOrAbstract) {\n // This is a regular field declaration, like `x;`. With the class transform enabled, we just\n // remove the line so that no output is produced. With the class transform disabled, we\n // usually want to preserve the declaration (but still strip types), but if the `declare`\n // or `abstract` keyword is specified, we should remove the line to avoid initializing the\n // value to undefined.\n rangesToRemove.push({start: statementStartIndex, end: tokens.currentIndex()});\n }\n }\n }\n\n tokens.restoreToSnapshot(snapshot);\n if (disableESTransforms) {\n // With ES transforms disabled, we don't want to transform regular class\n // field declarations, and we don't need to do any additional tricks to\n // reference the constructor for static init, but we still need to transform\n // TypeScript field initializers defined as constructor parameters and we\n // still need to remove `declare` fields. For now, we run the same code\n // path but omit any field information, as if the class had no field\n // declarations. In the future, when we fully drop the class fields\n // transform, we can simplify this code significantly.\n return {\n headerInfo,\n constructorInitializerStatements,\n instanceInitializerNames: [],\n staticInitializerNames: [],\n constructorInsertPos,\n fields: [],\n rangesToRemove,\n };\n } else {\n return {\n headerInfo,\n constructorInitializerStatements,\n instanceInitializerNames,\n staticInitializerNames,\n constructorInsertPos,\n fields,\n rangesToRemove,\n };\n }\n}\n\n/**\n * Move the token processor to the next method/field in the class.\n *\n * To do that, we seek forward to the next start of a class name (either an open\n * bracket or an identifier, or the closing curly brace), then seek backward to\n * include any access modifiers.\n */\nfunction skipToNextClassElement(tokens, classContextId) {\n tokens.nextToken();\n while (tokens.currentToken().contextId !== classContextId) {\n tokens.nextToken();\n }\n while (isAccessModifier(tokens.tokenAtRelativeIndex(-1))) {\n tokens.previousToken();\n }\n}\n\nfunction processClassHeader(tokens) {\n const classToken = tokens.currentToken();\n const contextId = classToken.contextId;\n if (contextId == null) {\n throw new Error(\"Expected context ID on class token.\");\n }\n const isExpression = classToken.isExpression;\n if (isExpression == null) {\n throw new Error(\"Expected isExpression on class token.\");\n }\n let className = null;\n let hasSuperclass = false;\n tokens.nextToken();\n if (tokens.matches1(tt.name)) {\n className = tokens.identifierName();\n }\n while (!tokens.matchesContextIdAndLabel(tt.braceL, contextId)) {\n // If this has a superclass, there will always be an `extends` token. If it doesn't have a\n // superclass, only type parameters and `implements` clauses can show up here, all of which\n // consist only of type tokens. A declaration like `class A<B extends C> {` should *not* count\n // as having a superclass.\n if (tokens.matches1(tt._extends) && !tokens.currentToken().isType) {\n hasSuperclass = true;\n }\n tokens.nextToken();\n }\n return {isExpression, className, hasSuperclass};\n}\n\n/**\n * Extract useful information out of a constructor, starting at the \"constructor\" name.\n */\nfunction processConstructor(tokens)\n\n\n {\n const constructorInitializerStatements = [];\n\n tokens.nextToken();\n const constructorContextId = tokens.currentToken().contextId;\n if (constructorContextId == null) {\n throw new Error(\"Expected context ID on open-paren starting constructor params.\");\n }\n // Advance through parameters looking for access modifiers.\n while (!tokens.matchesContextIdAndLabel(tt.parenR, constructorContextId)) {\n if (tokens.currentToken().contextId === constructorContextId) {\n // Current token is an open paren or comma just before a param, so check\n // that param for access modifiers.\n tokens.nextToken();\n if (isAccessModifier(tokens.currentToken())) {\n tokens.nextToken();\n while (isAccessModifier(tokens.currentToken())) {\n tokens.nextToken();\n }\n const token = tokens.currentToken();\n if (token.type !== tt.name) {\n throw new Error(\"Expected identifier after access modifiers in constructor arg.\");\n }\n const name = tokens.identifierNameForToken(token);\n constructorInitializerStatements.push(`this.${name} = ${name}`);\n }\n } else {\n tokens.nextToken();\n }\n }\n // )\n tokens.nextToken();\n // Constructor type annotations are invalid, but skip them anyway since\n // they're easy to skip.\n while (tokens.currentToken().isType) {\n tokens.nextToken();\n }\n let constructorInsertPos = tokens.currentIndex();\n\n // Advance through body looking for a super call.\n let foundSuperCall = false;\n while (!tokens.matchesContextIdAndLabel(tt.braceR, constructorContextId)) {\n if (!foundSuperCall && tokens.matches2(tt._super, tt.parenL)) {\n tokens.nextToken();\n const superCallContextId = tokens.currentToken().contextId;\n if (superCallContextId == null) {\n throw new Error(\"Expected a context ID on the super call\");\n }\n while (!tokens.matchesContextIdAndLabel(tt.parenR, superCallContextId)) {\n tokens.nextToken();\n }\n constructorInsertPos = tokens.currentIndex();\n foundSuperCall = true;\n }\n tokens.nextToken();\n }\n // }\n tokens.nextToken();\n\n return {constructorInitializerStatements, constructorInsertPos};\n}\n\n/**\n * Determine if this is any token that can go before the name in a method/field.\n */\nfunction isAccessModifier(token) {\n return [\n tt._async,\n tt._get,\n tt._set,\n tt.plus,\n tt.minus,\n tt._readonly,\n tt._static,\n tt._public,\n tt._private,\n tt._protected,\n tt._override,\n tt._abstract,\n tt.star,\n tt._declare,\n tt.hash,\n ].includes(token.type);\n}\n\n/**\n * The next token or set of tokens is either an identifier or an expression in square brackets, for\n * a method or field name.\n */\nfunction skipFieldName(tokens) {\n if (tokens.matches1(tt.bracketL)) {\n const startToken = tokens.currentToken();\n const classContextId = startToken.contextId;\n if (classContextId == null) {\n throw new Error(\"Expected class context ID on computed name open bracket.\");\n }\n while (!tokens.matchesContextIdAndLabel(tt.bracketR, classContextId)) {\n tokens.nextToken();\n }\n tokens.nextToken();\n } else {\n tokens.nextToken();\n }\n}\n","import {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\nexport default function elideImportEquals(tokens) {\n // import\n tokens.removeInitialToken();\n // name\n tokens.removeToken();\n // =\n tokens.removeToken();\n // name or require\n tokens.removeToken();\n // Handle either `import A = require('A')` or `import A = B.C.D`.\n if (tokens.matches1(tt.parenL)) {\n // (\n tokens.removeToken();\n // path string\n tokens.removeToken();\n // )\n tokens.removeToken();\n } else {\n while (tokens.matches1(tt.dot)) {\n // .\n tokens.removeToken();\n // name\n tokens.removeToken();\n }\n }\n}\n","import {isTopLevelDeclaration} from \"../parser/tokenizer\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\n\n\n\n\n\nexport const EMPTY_DECLARATION_INFO = {\n typeDeclarations: new Set(),\n valueDeclarations: new Set(),\n};\n\n/**\n * Get all top-level identifiers that should be preserved when exported in TypeScript.\n *\n * Examples:\n * - If an identifier is declared as `const x`, then `export {x}` should be preserved.\n * - If it's declared as `type x`, then `export {x}` should be removed.\n * - If it's declared as both `const x` and `type x`, then the export should be preserved.\n * - Classes and enums should be preserved (even though they also introduce types).\n * - Imported identifiers should be preserved since we don't have enough information to\n * rule them out. --isolatedModules disallows re-exports, which catches errors here.\n */\nexport default function getDeclarationInfo(tokens) {\n const typeDeclarations = new Set();\n const valueDeclarations = new Set();\n for (let i = 0; i < tokens.tokens.length; i++) {\n const token = tokens.tokens[i];\n if (token.type === tt.name && isTopLevelDeclaration(token)) {\n if (token.isType) {\n typeDeclarations.add(tokens.identifierNameForToken(token));\n } else {\n valueDeclarations.add(tokens.identifierNameForToken(token));\n }\n }\n }\n return {typeDeclarations, valueDeclarations};\n}\n","import {ContextualKeyword} from \"../parser/tokenizer/keywords\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\n/**\n * Starting at `export {`, look ahead and return `true` if this is an\n * `export {...} from` statement and `false` if this is a plain multi-export.\n */\nexport default function isExportFrom(tokens) {\n let closeBraceIndex = tokens.currentIndex();\n while (!tokens.matches1AtIndex(closeBraceIndex, tt.braceR)) {\n closeBraceIndex++;\n }\n return (\n tokens.matchesContextualAtIndex(closeBraceIndex + 1, ContextualKeyword._from) &&\n tokens.matches1AtIndex(closeBraceIndex + 2, tt.string)\n );\n}\n","import {ContextualKeyword} from \"../parser/tokenizer/keywords\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\n/**\n * Starting at a potential `with` or (legacy) `assert` token, remove the import\n * attributes if they exist.\n */\nexport function removeMaybeImportAttributes(tokens) {\n if (\n tokens.matches2(tt._with, tt.braceL) ||\n (tokens.matches2(tt.name, tt.braceL) && tokens.matchesContextual(ContextualKeyword._assert))\n ) {\n // assert\n tokens.removeToken();\n // {\n tokens.removeToken();\n tokens.removeBalancedCode();\n // }\n tokens.removeToken();\n }\n}\n","import {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\n\n/**\n * Common method sharing code between CJS and ESM cases, since they're the same here.\n */\nexport default function shouldElideDefaultExport(\n isTypeScriptTransformEnabled,\n keepUnusedImports,\n tokens,\n declarationInfo,\n) {\n if (!isTypeScriptTransformEnabled || keepUnusedImports) {\n return false;\n }\n const exportToken = tokens.currentToken();\n if (exportToken.rhsEndIndex == null) {\n throw new Error(\"Expected non-null rhsEndIndex on export token.\");\n }\n // The export must be of the form `export default a` or `export default a;`.\n const numTokens = exportToken.rhsEndIndex - tokens.currentIndex();\n if (\n numTokens !== 3 &&\n !(numTokens === 4 && tokens.matches1AtIndex(exportToken.rhsEndIndex - 1, tt.semi))\n ) {\n return false;\n }\n const identifierToken = tokens.tokenAtRelativeIndex(2);\n if (identifierToken.type !== tt.name) {\n return false;\n }\n const exportedName = tokens.identifierNameForToken(identifierToken);\n return (\n declarationInfo.typeDeclarations.has(exportedName) &&\n !declarationInfo.valueDeclarations.has(exportedName)\n );\n}\n","\n\n\nimport {IdentifierRole, isDeclaration, isObjectShorthandDeclaration} from \"../parser/tokenizer\";\nimport {ContextualKeyword} from \"../parser/tokenizer/keywords\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\nimport elideImportEquals from \"../util/elideImportEquals\";\nimport getDeclarationInfo, {\n\n EMPTY_DECLARATION_INFO,\n} from \"../util/getDeclarationInfo\";\nimport getImportExportSpecifierInfo from \"../util/getImportExportSpecifierInfo\";\nimport isExportFrom from \"../util/isExportFrom\";\nimport {removeMaybeImportAttributes} from \"../util/removeMaybeImportAttributes\";\nimport shouldElideDefaultExport from \"../util/shouldElideDefaultExport\";\n\n\nimport Transformer from \"./Transformer\";\n\n/**\n * Class for editing import statements when we are transforming to commonjs.\n */\nexport default class CJSImportTransformer extends Transformer {\n __init() {this.hadExport = false}\n __init2() {this.hadNamedExport = false}\n __init3() {this.hadDefaultExport = false}\n \n\n constructor(\n rootTransformer,\n tokens,\n importProcessor,\n nameManager,\n helperManager,\n reactHotLoaderTransformer,\n enableLegacyBabel5ModuleInterop,\n enableLegacyTypeScriptModuleInterop,\n isTypeScriptTransformEnabled,\n isFlowTransformEnabled,\n preserveDynamicImport,\n keepUnusedImports,\n ) {\n super();this.rootTransformer = rootTransformer;this.tokens = tokens;this.importProcessor = importProcessor;this.nameManager = nameManager;this.helperManager = helperManager;this.reactHotLoaderTransformer = reactHotLoaderTransformer;this.enableLegacyBabel5ModuleInterop = enableLegacyBabel5ModuleInterop;this.enableLegacyTypeScriptModuleInterop = enableLegacyTypeScriptModuleInterop;this.isTypeScriptTransformEnabled = isTypeScriptTransformEnabled;this.isFlowTransformEnabled = isFlowTransformEnabled;this.preserveDynamicImport = preserveDynamicImport;this.keepUnusedImports = keepUnusedImports;CJSImportTransformer.prototype.__init.call(this);CJSImportTransformer.prototype.__init2.call(this);CJSImportTransformer.prototype.__init3.call(this);;\n this.declarationInfo = isTypeScriptTransformEnabled\n ? getDeclarationInfo(tokens)\n : EMPTY_DECLARATION_INFO;\n }\n\n getPrefixCode() {\n let prefix = \"\";\n if (this.hadExport) {\n prefix += 'Object.defineProperty(exports, \"__esModule\", {value: true});';\n }\n return prefix;\n }\n\n getSuffixCode() {\n if (this.enableLegacyBabel5ModuleInterop && this.hadDefaultExport && !this.hadNamedExport) {\n return \"\\nmodule.exports = exports.default;\\n\";\n }\n return \"\";\n }\n\n process() {\n // TypeScript `import foo = require('foo');` should always just be translated to plain require.\n if (this.tokens.matches3(tt._import, tt.name, tt.eq)) {\n return this.processImportEquals();\n }\n if (this.tokens.matches1(tt._import)) {\n this.processImport();\n return true;\n }\n if (this.tokens.matches2(tt._export, tt.eq)) {\n this.tokens.replaceToken(\"module.exports\");\n return true;\n }\n if (this.tokens.matches1(tt._export) && !this.tokens.currentToken().isType) {\n this.hadExport = true;\n return this.processExport();\n }\n if (this.tokens.matches2(tt.name, tt.postIncDec)) {\n // Fall through to normal identifier matching if this doesn't apply.\n if (this.processPostIncDec()) {\n return true;\n }\n }\n if (this.tokens.matches1(tt.name) || this.tokens.matches1(tt.jsxName)) {\n return this.processIdentifier();\n }\n if (this.tokens.matches1(tt.eq)) {\n return this.processAssignment();\n }\n if (this.tokens.matches1(tt.assign)) {\n return this.processComplexAssignment();\n }\n if (this.tokens.matches1(tt.preIncDec)) {\n return this.processPreIncDec();\n }\n return false;\n }\n\n processImportEquals() {\n const importName = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1);\n if (this.importProcessor.shouldAutomaticallyElideImportedName(importName)) {\n // If this name is only used as a type, elide the whole import.\n elideImportEquals(this.tokens);\n } else {\n // Otherwise, switch `import` to `const`.\n this.tokens.replaceToken(\"const\");\n }\n return true;\n }\n\n /**\n * Transform this:\n * import foo, {bar} from 'baz';\n * into\n * var _baz = require('baz'); var _baz2 = _interopRequireDefault(_baz);\n *\n * The import code was already generated in the import preprocessing step, so\n * we just need to look it up.\n */\n processImport() {\n if (this.tokens.matches2(tt._import, tt.parenL)) {\n if (this.preserveDynamicImport) {\n // Bail out, only making progress for this one token.\n this.tokens.copyToken();\n return;\n }\n const requireWrapper = this.enableLegacyTypeScriptModuleInterop\n ? \"\"\n : `${this.helperManager.getHelperName(\"interopRequireWildcard\")}(`;\n this.tokens.replaceToken(`Promise.resolve().then(() => ${requireWrapper}require`);\n const contextId = this.tokens.currentToken().contextId;\n if (contextId == null) {\n throw new Error(\"Expected context ID on dynamic import invocation.\");\n }\n this.tokens.copyToken();\n while (!this.tokens.matchesContextIdAndLabel(tt.parenR, contextId)) {\n this.rootTransformer.processToken();\n }\n this.tokens.replaceToken(requireWrapper ? \")))\" : \"))\");\n return;\n }\n\n const shouldElideImport = this.removeImportAndDetectIfShouldElide();\n if (shouldElideImport) {\n this.tokens.removeToken();\n } else {\n const path = this.tokens.stringValue();\n this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path));\n this.tokens.appendCode(this.importProcessor.claimImportCode(path));\n }\n removeMaybeImportAttributes(this.tokens);\n if (this.tokens.matches1(tt.semi)) {\n this.tokens.removeToken();\n }\n }\n\n /**\n * Erase this import (since any CJS output would be completely different), and\n * return true if this import is should be elided due to being a type-only\n * import. Such imports will not be emitted at all to avoid side effects.\n *\n * Import elision only happens with the TypeScript or Flow transforms enabled.\n *\n * TODO: This function has some awkward overlap with\n * CJSImportProcessor.pruneTypeOnlyImports , and the two should be unified.\n * That function handles TypeScript implicit import name elision, and removes\n * an import if all typical imported names (without `type`) are removed due\n * to being type-only imports. This function handles Flow import removal and\n * properly distinguishes `import 'foo'` from `import {} from 'foo'` for TS\n * purposes.\n *\n * The position should end at the import string.\n */\n removeImportAndDetectIfShouldElide() {\n this.tokens.removeInitialToken();\n if (\n this.tokens.matchesContextual(ContextualKeyword._type) &&\n !this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, tt.comma) &&\n !this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._from)\n ) {\n // This is an \"import type\" statement, so exit early.\n this.removeRemainingImport();\n return true;\n }\n\n if (this.tokens.matches1(tt.name) || this.tokens.matches1(tt.star)) {\n // We have a default import or namespace import, so there must be some\n // non-type import.\n this.removeRemainingImport();\n return false;\n }\n\n if (this.tokens.matches1(tt.string)) {\n // This is a bare import, so we should proceed with the import.\n return false;\n }\n\n let foundNonTypeImport = false;\n let foundAnyNamedImport = false;\n while (!this.tokens.matches1(tt.string)) {\n // Check if any named imports are of the form \"foo\" or \"foo as bar\", with\n // no leading \"type\".\n if (\n (!foundNonTypeImport && this.tokens.matches1(tt.braceL)) ||\n this.tokens.matches1(tt.comma)\n ) {\n this.tokens.removeToken();\n if (!this.tokens.matches1(tt.braceR)) {\n foundAnyNamedImport = true;\n }\n if (\n this.tokens.matches2(tt.name, tt.comma) ||\n this.tokens.matches2(tt.name, tt.braceR) ||\n this.tokens.matches4(tt.name, tt.name, tt.name, tt.comma) ||\n this.tokens.matches4(tt.name, tt.name, tt.name, tt.braceR)\n ) {\n foundNonTypeImport = true;\n }\n }\n this.tokens.removeToken();\n }\n if (this.keepUnusedImports) {\n return false;\n }\n if (this.isTypeScriptTransformEnabled) {\n return !foundNonTypeImport;\n } else if (this.isFlowTransformEnabled) {\n // In Flow, unlike TS, `import {} from 'foo';` preserves the import.\n return foundAnyNamedImport && !foundNonTypeImport;\n } else {\n return false;\n }\n }\n\n removeRemainingImport() {\n while (!this.tokens.matches1(tt.string)) {\n this.tokens.removeToken();\n }\n }\n\n processIdentifier() {\n const token = this.tokens.currentToken();\n if (token.shadowsGlobal) {\n return false;\n }\n\n if (token.identifierRole === IdentifierRole.ObjectShorthand) {\n return this.processObjectShorthand();\n }\n\n if (token.identifierRole !== IdentifierRole.Access) {\n return false;\n }\n const replacement = this.importProcessor.getIdentifierReplacement(\n this.tokens.identifierNameForToken(token),\n );\n if (!replacement) {\n return false;\n }\n // Tolerate any number of closing parens while looking for an opening paren\n // that indicates a function call.\n let possibleOpenParenIndex = this.tokens.currentIndex() + 1;\n while (\n possibleOpenParenIndex < this.tokens.tokens.length &&\n this.tokens.tokens[possibleOpenParenIndex].type === tt.parenR\n ) {\n possibleOpenParenIndex++;\n }\n // Avoid treating imported functions as methods of their `exports` object\n // by using `(0, f)` when the identifier is in a paren expression. Else\n // use `Function.prototype.call` when the identifier is a guaranteed\n // function call. When using `call`, pass undefined as the context.\n if (this.tokens.tokens[possibleOpenParenIndex].type === tt.parenL) {\n if (\n this.tokens.tokenAtRelativeIndex(1).type === tt.parenL &&\n this.tokens.tokenAtRelativeIndex(-1).type !== tt._new\n ) {\n this.tokens.replaceToken(`${replacement}.call(void 0, `);\n // Remove the old paren.\n this.tokens.removeToken();\n // Balance out the new paren.\n this.rootTransformer.processBalancedCode();\n this.tokens.copyExpectedToken(tt.parenR);\n } else {\n // See here: http://2ality.com/2015/12/references.html\n this.tokens.replaceToken(`(0, ${replacement})`);\n }\n } else {\n this.tokens.replaceToken(replacement);\n }\n return true;\n }\n\n processObjectShorthand() {\n const identifier = this.tokens.identifierName();\n const replacement = this.importProcessor.getIdentifierReplacement(identifier);\n if (!replacement) {\n return false;\n }\n this.tokens.replaceToken(`${identifier}: ${replacement}`);\n return true;\n }\n\n processExport() {\n if (\n this.tokens.matches2(tt._export, tt._enum) ||\n this.tokens.matches3(tt._export, tt._const, tt._enum)\n ) {\n this.hadNamedExport = true;\n // Let the TypeScript transform handle it.\n return false;\n }\n if (this.tokens.matches2(tt._export, tt._default)) {\n if (this.tokens.matches3(tt._export, tt._default, tt._enum)) {\n this.hadDefaultExport = true;\n // Flow export default enums need some special handling, so handle them\n // in that tranform rather than this one.\n return false;\n }\n this.processExportDefault();\n return true;\n } else if (this.tokens.matches2(tt._export, tt.braceL)) {\n this.processExportBindings();\n return true;\n } else if (\n this.tokens.matches2(tt._export, tt.name) &&\n this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._type)\n ) {\n // export type {a};\n // export type {a as b};\n // export type {a} from './b';\n // export type * from './b';\n // export type * as ns from './b';\n this.tokens.removeInitialToken();\n this.tokens.removeToken();\n if (this.tokens.matches1(tt.braceL)) {\n while (!this.tokens.matches1(tt.braceR)) {\n this.tokens.removeToken();\n }\n this.tokens.removeToken();\n } else {\n // *\n this.tokens.removeToken();\n if (this.tokens.matches1(tt._as)) {\n // as\n this.tokens.removeToken();\n // ns\n this.tokens.removeToken();\n }\n }\n // Remove type re-export `... } from './T'`\n if (\n this.tokens.matchesContextual(ContextualKeyword._from) &&\n this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, tt.string)\n ) {\n this.tokens.removeToken();\n this.tokens.removeToken();\n removeMaybeImportAttributes(this.tokens);\n }\n return true;\n }\n this.hadNamedExport = true;\n if (\n this.tokens.matches2(tt._export, tt._var) ||\n this.tokens.matches2(tt._export, tt._let) ||\n this.tokens.matches2(tt._export, tt._const)\n ) {\n this.processExportVar();\n return true;\n } else if (\n this.tokens.matches2(tt._export, tt._function) ||\n // export async function\n this.tokens.matches3(tt._export, tt.name, tt._function)\n ) {\n this.processExportFunction();\n return true;\n } else if (\n this.tokens.matches2(tt._export, tt._class) ||\n this.tokens.matches3(tt._export, tt._abstract, tt._class) ||\n this.tokens.matches2(tt._export, tt.at)\n ) {\n this.processExportClass();\n return true;\n } else if (this.tokens.matches2(tt._export, tt.star)) {\n this.processExportStar();\n return true;\n } else {\n throw new Error(\"Unrecognized export syntax.\");\n }\n }\n\n processAssignment() {\n const index = this.tokens.currentIndex();\n const identifierToken = this.tokens.tokens[index - 1];\n // If the LHS is a type identifier, this must be a declaration like `let a: b = c;`,\n // with `b` as the identifier, so nothing needs to be done in that case.\n if (identifierToken.isType || identifierToken.type !== tt.name) {\n return false;\n }\n if (identifierToken.shadowsGlobal) {\n return false;\n }\n if (index >= 2 && this.tokens.matches1AtIndex(index - 2, tt.dot)) {\n return false;\n }\n if (index >= 2 && [tt._var, tt._let, tt._const].includes(this.tokens.tokens[index - 2].type)) {\n // Declarations don't need an extra assignment. This doesn't avoid the\n // assignment for comma-separated declarations, but it's still correct\n // since the assignment is just redundant.\n return false;\n }\n const assignmentSnippet = this.importProcessor.resolveExportBinding(\n this.tokens.identifierNameForToken(identifierToken),\n );\n if (!assignmentSnippet) {\n return false;\n }\n this.tokens.copyToken();\n this.tokens.appendCode(` ${assignmentSnippet} =`);\n return true;\n }\n\n /**\n * Process something like `a += 3`, where `a` might be an exported value.\n */\n processComplexAssignment() {\n const index = this.tokens.currentIndex();\n const identifierToken = this.tokens.tokens[index - 1];\n if (identifierToken.type !== tt.name) {\n return false;\n }\n if (identifierToken.shadowsGlobal) {\n return false;\n }\n if (index >= 2 && this.tokens.matches1AtIndex(index - 2, tt.dot)) {\n return false;\n }\n const assignmentSnippet = this.importProcessor.resolveExportBinding(\n this.tokens.identifierNameForToken(identifierToken),\n );\n if (!assignmentSnippet) {\n return false;\n }\n this.tokens.appendCode(` = ${assignmentSnippet}`);\n this.tokens.copyToken();\n return true;\n }\n\n /**\n * Process something like `++a`, where `a` might be an exported value.\n */\n processPreIncDec() {\n const index = this.tokens.currentIndex();\n const identifierToken = this.tokens.tokens[index + 1];\n if (identifierToken.type !== tt.name) {\n return false;\n }\n if (identifierToken.shadowsGlobal) {\n return false;\n }\n // Ignore things like ++a.b and ++a[b] and ++a().b.\n if (\n index + 2 < this.tokens.tokens.length &&\n (this.tokens.matches1AtIndex(index + 2, tt.dot) ||\n this.tokens.matches1AtIndex(index + 2, tt.bracketL) ||\n this.tokens.matches1AtIndex(index + 2, tt.parenL))\n ) {\n return false;\n }\n const identifierName = this.tokens.identifierNameForToken(identifierToken);\n const assignmentSnippet = this.importProcessor.resolveExportBinding(identifierName);\n if (!assignmentSnippet) {\n return false;\n }\n this.tokens.appendCode(`${assignmentSnippet} = `);\n this.tokens.copyToken();\n return true;\n }\n\n /**\n * Process something like `a++`, where `a` might be an exported value.\n * This starts at the `a`, not at the `++`.\n */\n processPostIncDec() {\n const index = this.tokens.currentIndex();\n const identifierToken = this.tokens.tokens[index];\n const operatorToken = this.tokens.tokens[index + 1];\n if (identifierToken.type !== tt.name) {\n return false;\n }\n if (identifierToken.shadowsGlobal) {\n return false;\n }\n if (index >= 1 && this.tokens.matches1AtIndex(index - 1, tt.dot)) {\n return false;\n }\n const identifierName = this.tokens.identifierNameForToken(identifierToken);\n const assignmentSnippet = this.importProcessor.resolveExportBinding(identifierName);\n if (!assignmentSnippet) {\n return false;\n }\n const operatorCode = this.tokens.rawCodeForToken(operatorToken);\n // We might also replace the identifier with something like exports.x, so\n // do that replacement here as well.\n const base = this.importProcessor.getIdentifierReplacement(identifierName) || identifierName;\n if (operatorCode === \"++\") {\n this.tokens.replaceToken(`(${base} = ${assignmentSnippet} = ${base} + 1, ${base} - 1)`);\n } else if (operatorCode === \"--\") {\n this.tokens.replaceToken(`(${base} = ${assignmentSnippet} = ${base} - 1, ${base} + 1)`);\n } else {\n throw new Error(`Unexpected operator: ${operatorCode}`);\n }\n this.tokens.removeToken();\n return true;\n }\n\n processExportDefault() {\n let exportedRuntimeValue = true;\n if (\n this.tokens.matches4(tt._export, tt._default, tt._function, tt.name) ||\n // export default async function\n (this.tokens.matches5(tt._export, tt._default, tt.name, tt._function, tt.name) &&\n this.tokens.matchesContextualAtIndex(\n this.tokens.currentIndex() + 2,\n ContextualKeyword._async,\n ))\n ) {\n this.tokens.removeInitialToken();\n this.tokens.removeToken();\n // Named function export case: change it to a top-level function\n // declaration followed by exports statement.\n const name = this.processNamedFunction();\n this.tokens.appendCode(` exports.default = ${name};`);\n } else if (\n this.tokens.matches4(tt._export, tt._default, tt._class, tt.name) ||\n this.tokens.matches5(tt._export, tt._default, tt._abstract, tt._class, tt.name) ||\n this.tokens.matches3(tt._export, tt._default, tt.at)\n ) {\n this.tokens.removeInitialToken();\n this.tokens.removeToken();\n this.copyDecorators();\n if (this.tokens.matches1(tt._abstract)) {\n this.tokens.removeToken();\n }\n const name = this.rootTransformer.processNamedClass();\n this.tokens.appendCode(` exports.default = ${name};`);\n // After this point, this is a plain \"export default E\" statement.\n } else if (\n shouldElideDefaultExport(\n this.isTypeScriptTransformEnabled,\n this.keepUnusedImports,\n this.tokens,\n this.declarationInfo,\n )\n ) {\n // If the exported value is just an identifier and should be elided by TypeScript\n // rules, then remove it entirely. It will always have the form `export default e`,\n // where `e` is an identifier.\n exportedRuntimeValue = false;\n this.tokens.removeInitialToken();\n this.tokens.removeToken();\n this.tokens.removeToken();\n } else if (this.reactHotLoaderTransformer) {\n // We need to assign E to a variable. Change \"export default E\" to\n // \"let _default; exports.default = _default = E\"\n const defaultVarName = this.nameManager.claimFreeName(\"_default\");\n this.tokens.replaceToken(`let ${defaultVarName}; exports.`);\n this.tokens.copyToken();\n this.tokens.appendCode(` = ${defaultVarName} =`);\n this.reactHotLoaderTransformer.setExtractedDefaultExportName(defaultVarName);\n } else {\n // Change \"export default E\" to \"exports.default = E\"\n this.tokens.replaceToken(\"exports.\");\n this.tokens.copyToken();\n this.tokens.appendCode(\" =\");\n }\n if (exportedRuntimeValue) {\n this.hadDefaultExport = true;\n }\n }\n\n copyDecorators() {\n while (this.tokens.matches1(tt.at)) {\n this.tokens.copyToken();\n if (this.tokens.matches1(tt.parenL)) {\n this.tokens.copyExpectedToken(tt.parenL);\n this.rootTransformer.processBalancedCode();\n this.tokens.copyExpectedToken(tt.parenR);\n } else {\n this.tokens.copyExpectedToken(tt.name);\n while (this.tokens.matches1(tt.dot)) {\n this.tokens.copyExpectedToken(tt.dot);\n this.tokens.copyExpectedToken(tt.name);\n }\n if (this.tokens.matches1(tt.parenL)) {\n this.tokens.copyExpectedToken(tt.parenL);\n this.rootTransformer.processBalancedCode();\n this.tokens.copyExpectedToken(tt.parenR);\n }\n }\n }\n }\n\n /**\n * Transform a declaration like `export var`, `export let`, or `export const`.\n */\n processExportVar() {\n if (this.isSimpleExportVar()) {\n this.processSimpleExportVar();\n } else {\n this.processComplexExportVar();\n }\n }\n\n /**\n * Determine if the export is of the form:\n * export var/let/const [varName] = [expr];\n * In other words, determine if function name inference might apply.\n */\n isSimpleExportVar() {\n let tokenIndex = this.tokens.currentIndex();\n // export\n tokenIndex++;\n // var/let/const\n tokenIndex++;\n if (!this.tokens.matches1AtIndex(tokenIndex, tt.name)) {\n return false;\n }\n tokenIndex++;\n while (tokenIndex < this.tokens.tokens.length && this.tokens.tokens[tokenIndex].isType) {\n tokenIndex++;\n }\n if (!this.tokens.matches1AtIndex(tokenIndex, tt.eq)) {\n return false;\n }\n return true;\n }\n\n /**\n * Transform an `export var` declaration initializing a single variable.\n *\n * For example, this:\n * export const f = () => {};\n * becomes this:\n * const f = () => {}; exports.f = f;\n *\n * The variable is unused (e.g. exports.f has the true value of the export).\n * We need to produce an assignment of this form so that the function will\n * have an inferred name of \"f\", which wouldn't happen in the more general\n * case below.\n */\n processSimpleExportVar() {\n // export\n this.tokens.removeInitialToken();\n // var/let/const\n this.tokens.copyToken();\n const varName = this.tokens.identifierName();\n // x: number -> x\n while (!this.tokens.matches1(tt.eq)) {\n this.rootTransformer.processToken();\n }\n const endIndex = this.tokens.currentToken().rhsEndIndex;\n if (endIndex == null) {\n throw new Error(\"Expected = token with an end index.\");\n }\n while (this.tokens.currentIndex() < endIndex) {\n this.rootTransformer.processToken();\n }\n this.tokens.appendCode(`; exports.${varName} = ${varName}`);\n }\n\n /**\n * Transform normal declaration exports, including handling destructuring.\n * For example, this:\n * export const {x: [a = 2, b], c} = d;\n * becomes this:\n * ({x: [exports.a = 2, exports.b], c: exports.c} = d;)\n */\n processComplexExportVar() {\n this.tokens.removeInitialToken();\n this.tokens.removeToken();\n const needsParens = this.tokens.matches1(tt.braceL);\n if (needsParens) {\n this.tokens.appendCode(\"(\");\n }\n\n let depth = 0;\n while (true) {\n if (\n this.tokens.matches1(tt.braceL) ||\n this.tokens.matches1(tt.dollarBraceL) ||\n this.tokens.matches1(tt.bracketL)\n ) {\n depth++;\n this.tokens.copyToken();\n } else if (this.tokens.matches1(tt.braceR) || this.tokens.matches1(tt.bracketR)) {\n depth--;\n this.tokens.copyToken();\n } else if (\n depth === 0 &&\n !this.tokens.matches1(tt.name) &&\n !this.tokens.currentToken().isType\n ) {\n break;\n } else if (this.tokens.matches1(tt.eq)) {\n // Default values might have assignments in the RHS that we want to ignore, so skip past\n // them.\n const endIndex = this.tokens.currentToken().rhsEndIndex;\n if (endIndex == null) {\n throw new Error(\"Expected = token with an end index.\");\n }\n while (this.tokens.currentIndex() < endIndex) {\n this.rootTransformer.processToken();\n }\n } else {\n const token = this.tokens.currentToken();\n if (isDeclaration(token)) {\n const name = this.tokens.identifierName();\n let replacement = this.importProcessor.getIdentifierReplacement(name);\n if (replacement === null) {\n throw new Error(`Expected a replacement for ${name} in \\`export var\\` syntax.`);\n }\n if (isObjectShorthandDeclaration(token)) {\n replacement = `${name}: ${replacement}`;\n }\n this.tokens.replaceToken(replacement);\n } else {\n this.rootTransformer.processToken();\n }\n }\n }\n\n if (needsParens) {\n // Seek to the end of the RHS.\n const endIndex = this.tokens.currentToken().rhsEndIndex;\n if (endIndex == null) {\n throw new Error(\"Expected = token with an end index.\");\n }\n while (this.tokens.currentIndex() < endIndex) {\n this.rootTransformer.processToken();\n }\n this.tokens.appendCode(\")\");\n }\n }\n\n /**\n * Transform this:\n * export function foo() {}\n * into this:\n * function foo() {} exports.foo = foo;\n */\n processExportFunction() {\n this.tokens.replaceToken(\"\");\n const name = this.processNamedFunction();\n this.tokens.appendCode(` exports.${name} = ${name};`);\n }\n\n /**\n * Skip past a function with a name and return that name.\n */\n processNamedFunction() {\n if (this.tokens.matches1(tt._function)) {\n this.tokens.copyToken();\n } else if (this.tokens.matches2(tt.name, tt._function)) {\n if (!this.tokens.matchesContextual(ContextualKeyword._async)) {\n throw new Error(\"Expected async keyword in function export.\");\n }\n this.tokens.copyToken();\n this.tokens.copyToken();\n }\n if (this.tokens.matches1(tt.star)) {\n this.tokens.copyToken();\n }\n if (!this.tokens.matches1(tt.name)) {\n throw new Error(\"Expected identifier for exported function name.\");\n }\n const name = this.tokens.identifierName();\n this.tokens.copyToken();\n if (this.tokens.currentToken().isType) {\n this.tokens.removeInitialToken();\n while (this.tokens.currentToken().isType) {\n this.tokens.removeToken();\n }\n }\n this.tokens.copyExpectedToken(tt.parenL);\n this.rootTransformer.processBalancedCode();\n this.tokens.copyExpectedToken(tt.parenR);\n this.rootTransformer.processPossibleTypeRange();\n this.tokens.copyExpectedToken(tt.braceL);\n this.rootTransformer.processBalancedCode();\n this.tokens.copyExpectedToken(tt.braceR);\n return name;\n }\n\n /**\n * Transform this:\n * export class A {}\n * into this:\n * class A {} exports.A = A;\n */\n processExportClass() {\n this.tokens.removeInitialToken();\n this.copyDecorators();\n if (this.tokens.matches1(tt._abstract)) {\n this.tokens.removeToken();\n }\n const name = this.rootTransformer.processNamedClass();\n this.tokens.appendCode(` exports.${name} = ${name};`);\n }\n\n /**\n * Transform this:\n * export {a, b as c};\n * into this:\n * exports.a = a; exports.c = b;\n *\n * OR\n *\n * Transform this:\n * export {a, b as c} from './foo';\n * into the pre-generated Object.defineProperty code from the ImportProcessor.\n *\n * For the first case, if the TypeScript transform is enabled, we need to skip\n * exports that are only defined as types.\n */\n processExportBindings() {\n this.tokens.removeInitialToken();\n this.tokens.removeToken();\n\n const isReExport = isExportFrom(this.tokens);\n\n const exportStatements = [];\n while (true) {\n if (this.tokens.matches1(tt.braceR)) {\n this.tokens.removeToken();\n break;\n }\n\n const specifierInfo = getImportExportSpecifierInfo(this.tokens);\n\n while (this.tokens.currentIndex() < specifierInfo.endIndex) {\n this.tokens.removeToken();\n }\n\n const shouldRemoveExport =\n specifierInfo.isType ||\n (!isReExport && this.shouldElideExportedIdentifier(specifierInfo.leftName));\n if (!shouldRemoveExport) {\n const exportedName = specifierInfo.rightName;\n if (exportedName === \"default\") {\n this.hadDefaultExport = true;\n } else {\n this.hadNamedExport = true;\n }\n const localName = specifierInfo.leftName;\n const newLocalName = this.importProcessor.getIdentifierReplacement(localName);\n exportStatements.push(`exports.${exportedName} = ${newLocalName || localName};`);\n }\n\n if (this.tokens.matches1(tt.braceR)) {\n this.tokens.removeToken();\n break;\n }\n if (this.tokens.matches2(tt.comma, tt.braceR)) {\n this.tokens.removeToken();\n this.tokens.removeToken();\n break;\n } else if (this.tokens.matches1(tt.comma)) {\n this.tokens.removeToken();\n } else {\n throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.currentToken())}`);\n }\n }\n\n if (this.tokens.matchesContextual(ContextualKeyword._from)) {\n // This is an export...from, so throw away the normal named export code\n // and use the Object.defineProperty code from ImportProcessor.\n this.tokens.removeToken();\n const path = this.tokens.stringValue();\n this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path));\n removeMaybeImportAttributes(this.tokens);\n } else {\n // This is a normal named export, so use that.\n this.tokens.appendCode(exportStatements.join(\" \"));\n }\n\n if (this.tokens.matches1(tt.semi)) {\n this.tokens.removeToken();\n }\n }\n\n processExportStar() {\n this.tokens.removeInitialToken();\n while (!this.tokens.matches1(tt.string)) {\n this.tokens.removeToken();\n }\n const path = this.tokens.stringValue();\n this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path));\n removeMaybeImportAttributes(this.tokens);\n if (this.tokens.matches1(tt.semi)) {\n this.tokens.removeToken();\n }\n }\n\n shouldElideExportedIdentifier(name) {\n return (\n this.isTypeScriptTransformEnabled &&\n !this.keepUnusedImports &&\n !this.declarationInfo.valueDeclarations.has(name)\n );\n }\n}\n","\n\n\nimport {ContextualKeyword} from \"../parser/tokenizer/keywords\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\nimport elideImportEquals from \"../util/elideImportEquals\";\nimport getDeclarationInfo, {\n\n EMPTY_DECLARATION_INFO,\n} from \"../util/getDeclarationInfo\";\nimport getImportExportSpecifierInfo from \"../util/getImportExportSpecifierInfo\";\nimport {getNonTypeIdentifiers} from \"../util/getNonTypeIdentifiers\";\nimport isExportFrom from \"../util/isExportFrom\";\nimport {removeMaybeImportAttributes} from \"../util/removeMaybeImportAttributes\";\nimport shouldElideDefaultExport from \"../util/shouldElideDefaultExport\";\n\nimport Transformer from \"./Transformer\";\n\n/**\n * Class for editing import statements when we are keeping the code as ESM. We still need to remove\n * type-only imports in TypeScript and Flow.\n */\nexport default class ESMImportTransformer extends Transformer {\n \n \n \n\n constructor(\n tokens,\n nameManager,\n helperManager,\n reactHotLoaderTransformer,\n isTypeScriptTransformEnabled,\n isFlowTransformEnabled,\n keepUnusedImports,\n options,\n ) {\n super();this.tokens = tokens;this.nameManager = nameManager;this.helperManager = helperManager;this.reactHotLoaderTransformer = reactHotLoaderTransformer;this.isTypeScriptTransformEnabled = isTypeScriptTransformEnabled;this.isFlowTransformEnabled = isFlowTransformEnabled;this.keepUnusedImports = keepUnusedImports;;\n this.nonTypeIdentifiers =\n isTypeScriptTransformEnabled && !keepUnusedImports\n ? getNonTypeIdentifiers(tokens, options)\n : new Set();\n this.declarationInfo =\n isTypeScriptTransformEnabled && !keepUnusedImports\n ? getDeclarationInfo(tokens)\n : EMPTY_DECLARATION_INFO;\n this.injectCreateRequireForImportRequire = Boolean(options.injectCreateRequireForImportRequire);\n }\n\n process() {\n // TypeScript `import foo = require('foo');` should always just be translated to plain require.\n if (this.tokens.matches3(tt._import, tt.name, tt.eq)) {\n return this.processImportEquals();\n }\n if (\n this.tokens.matches4(tt._import, tt.name, tt.name, tt.eq) &&\n this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._type)\n ) {\n // import type T = require('T')\n this.tokens.removeInitialToken();\n // This construct is always exactly 8 tokens long, so remove the 7 remaining tokens.\n for (let i = 0; i < 7; i++) {\n this.tokens.removeToken();\n }\n return true;\n }\n if (this.tokens.matches2(tt._export, tt.eq)) {\n this.tokens.replaceToken(\"module.exports\");\n return true;\n }\n if (\n this.tokens.matches5(tt._export, tt._import, tt.name, tt.name, tt.eq) &&\n this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 2, ContextualKeyword._type)\n ) {\n // export import type T = require('T')\n this.tokens.removeInitialToken();\n // This construct is always exactly 9 tokens long, so remove the 8 remaining tokens.\n for (let i = 0; i < 8; i++) {\n this.tokens.removeToken();\n }\n return true;\n }\n if (this.tokens.matches1(tt._import)) {\n return this.processImport();\n }\n if (this.tokens.matches2(tt._export, tt._default)) {\n return this.processExportDefault();\n }\n if (this.tokens.matches2(tt._export, tt.braceL)) {\n return this.processNamedExports();\n }\n if (\n this.tokens.matches2(tt._export, tt.name) &&\n this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._type)\n ) {\n // export type {a};\n // export type {a as b};\n // export type {a} from './b';\n // export type * from './b';\n // export type * as ns from './b';\n this.tokens.removeInitialToken();\n this.tokens.removeToken();\n if (this.tokens.matches1(tt.braceL)) {\n while (!this.tokens.matches1(tt.braceR)) {\n this.tokens.removeToken();\n }\n this.tokens.removeToken();\n } else {\n // *\n this.tokens.removeToken();\n if (this.tokens.matches1(tt._as)) {\n // as\n this.tokens.removeToken();\n // ns\n this.tokens.removeToken();\n }\n }\n // Remove type re-export `... } from './T'`\n if (\n this.tokens.matchesContextual(ContextualKeyword._from) &&\n this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, tt.string)\n ) {\n this.tokens.removeToken();\n this.tokens.removeToken();\n removeMaybeImportAttributes(this.tokens);\n }\n return true;\n }\n return false;\n }\n\n processImportEquals() {\n const importName = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1);\n if (this.shouldAutomaticallyElideImportedName(importName)) {\n // If this name is only used as a type, elide the whole import.\n elideImportEquals(this.tokens);\n } else if (this.injectCreateRequireForImportRequire) {\n // We're using require in an environment (Node ESM) that doesn't provide\n // it as a global, so generate a helper to import it.\n // import -> const\n this.tokens.replaceToken(\"const\");\n // Foo\n this.tokens.copyToken();\n // =\n this.tokens.copyToken();\n // require\n this.tokens.replaceToken(this.helperManager.getHelperName(\"require\"));\n } else {\n // Otherwise, just switch `import` to `const`.\n this.tokens.replaceToken(\"const\");\n }\n return true;\n }\n\n processImport() {\n if (this.tokens.matches2(tt._import, tt.parenL)) {\n // Dynamic imports don't need to be transformed.\n return false;\n }\n\n const snapshot = this.tokens.snapshot();\n const allImportsRemoved = this.removeImportTypeBindings();\n if (allImportsRemoved) {\n this.tokens.restoreToSnapshot(snapshot);\n while (!this.tokens.matches1(tt.string)) {\n this.tokens.removeToken();\n }\n this.tokens.removeToken();\n removeMaybeImportAttributes(this.tokens);\n if (this.tokens.matches1(tt.semi)) {\n this.tokens.removeToken();\n }\n }\n return true;\n }\n\n /**\n * Remove type bindings from this import, leaving the rest of the import intact.\n *\n * Return true if this import was ONLY types, and thus is eligible for removal. This will bail out\n * of the replacement operation, so we can return early here.\n */\n removeImportTypeBindings() {\n this.tokens.copyExpectedToken(tt._import);\n if (\n this.tokens.matchesContextual(ContextualKeyword._type) &&\n !this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, tt.comma) &&\n !this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._from)\n ) {\n // This is an \"import type\" statement, so exit early.\n return true;\n }\n\n if (this.tokens.matches1(tt.string)) {\n // This is a bare import, so we should proceed with the import.\n this.tokens.copyToken();\n return false;\n }\n\n // Skip the \"module\" token in import reflection.\n if (\n this.tokens.matchesContextual(ContextualKeyword._module) &&\n this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 2, ContextualKeyword._from)\n ) {\n this.tokens.copyToken();\n }\n\n let foundNonTypeImport = false;\n let foundAnyNamedImport = false;\n let needsComma = false;\n\n // Handle default import.\n if (this.tokens.matches1(tt.name)) {\n if (this.shouldAutomaticallyElideImportedName(this.tokens.identifierName())) {\n this.tokens.removeToken();\n if (this.tokens.matches1(tt.comma)) {\n this.tokens.removeToken();\n }\n } else {\n foundNonTypeImport = true;\n this.tokens.copyToken();\n if (this.tokens.matches1(tt.comma)) {\n // We're in a statement like:\n // import A, * as B from './A';\n // or\n // import A, {foo} from './A';\n // where the `A` is being kept. The comma should be removed if an only\n // if the next part of the import statement is elided, but that's hard\n // to determine at this point in the code. Instead, always remove it\n // and set a flag to add it back if necessary.\n needsComma = true;\n this.tokens.removeToken();\n }\n }\n }\n\n if (this.tokens.matches1(tt.star)) {\n if (this.shouldAutomaticallyElideImportedName(this.tokens.identifierNameAtRelativeIndex(2))) {\n this.tokens.removeToken();\n this.tokens.removeToken();\n this.tokens.removeToken();\n } else {\n if (needsComma) {\n this.tokens.appendCode(\",\");\n }\n foundNonTypeImport = true;\n this.tokens.copyExpectedToken(tt.star);\n this.tokens.copyExpectedToken(tt.name);\n this.tokens.copyExpectedToken(tt.name);\n }\n } else if (this.tokens.matches1(tt.braceL)) {\n if (needsComma) {\n this.tokens.appendCode(\",\");\n }\n this.tokens.copyToken();\n while (!this.tokens.matches1(tt.braceR)) {\n foundAnyNamedImport = true;\n const specifierInfo = getImportExportSpecifierInfo(this.tokens);\n if (\n specifierInfo.isType ||\n this.shouldAutomaticallyElideImportedName(specifierInfo.rightName)\n ) {\n while (this.tokens.currentIndex() < specifierInfo.endIndex) {\n this.tokens.removeToken();\n }\n if (this.tokens.matches1(tt.comma)) {\n this.tokens.removeToken();\n }\n } else {\n foundNonTypeImport = true;\n while (this.tokens.currentIndex() < specifierInfo.endIndex) {\n this.tokens.copyToken();\n }\n if (this.tokens.matches1(tt.comma)) {\n this.tokens.copyToken();\n }\n }\n }\n this.tokens.copyExpectedToken(tt.braceR);\n }\n\n if (this.keepUnusedImports) {\n return false;\n }\n if (this.isTypeScriptTransformEnabled) {\n return !foundNonTypeImport;\n } else if (this.isFlowTransformEnabled) {\n // In Flow, unlike TS, `import {} from 'foo';` preserves the import.\n return foundAnyNamedImport && !foundNonTypeImport;\n } else {\n return false;\n }\n }\n\n shouldAutomaticallyElideImportedName(name) {\n return (\n this.isTypeScriptTransformEnabled &&\n !this.keepUnusedImports &&\n !this.nonTypeIdentifiers.has(name)\n );\n }\n\n processExportDefault() {\n if (\n shouldElideDefaultExport(\n this.isTypeScriptTransformEnabled,\n this.keepUnusedImports,\n this.tokens,\n this.declarationInfo,\n )\n ) {\n // If the exported value is just an identifier and should be elided by TypeScript\n // rules, then remove it entirely. It will always have the form `export default e`,\n // where `e` is an identifier.\n this.tokens.removeInitialToken();\n this.tokens.removeToken();\n this.tokens.removeToken();\n return true;\n }\n\n const alreadyHasName =\n this.tokens.matches4(tt._export, tt._default, tt._function, tt.name) ||\n // export default async function\n (this.tokens.matches5(tt._export, tt._default, tt.name, tt._function, tt.name) &&\n this.tokens.matchesContextualAtIndex(\n this.tokens.currentIndex() + 2,\n ContextualKeyword._async,\n )) ||\n this.tokens.matches4(tt._export, tt._default, tt._class, tt.name) ||\n this.tokens.matches5(tt._export, tt._default, tt._abstract, tt._class, tt.name);\n\n if (!alreadyHasName && this.reactHotLoaderTransformer) {\n // This is a plain \"export default E\" statement and we need to assign E to a variable.\n // Change \"export default E\" to \"let _default; export default _default = E\"\n const defaultVarName = this.nameManager.claimFreeName(\"_default\");\n this.tokens.replaceToken(`let ${defaultVarName}; export`);\n this.tokens.copyToken();\n this.tokens.appendCode(` ${defaultVarName} =`);\n this.reactHotLoaderTransformer.setExtractedDefaultExportName(defaultVarName);\n return true;\n }\n return false;\n }\n\n /**\n * Handle a statement with one of these forms:\n * export {a, type b};\n * export {c, type d} from 'foo';\n *\n * In both cases, any explicit type exports should be removed. In the first\n * case, we also need to handle implicit export elision for names declared as\n * types. In the second case, we must NOT do implicit named export elision,\n * but we must remove the runtime import if all exports are type exports.\n */\n processNamedExports() {\n if (!this.isTypeScriptTransformEnabled) {\n return false;\n }\n this.tokens.copyExpectedToken(tt._export);\n this.tokens.copyExpectedToken(tt.braceL);\n\n const isReExport = isExportFrom(this.tokens);\n let foundNonTypeExport = false;\n while (!this.tokens.matches1(tt.braceR)) {\n const specifierInfo = getImportExportSpecifierInfo(this.tokens);\n if (\n specifierInfo.isType ||\n (!isReExport && this.shouldElideExportedName(specifierInfo.leftName))\n ) {\n // Type export, so remove all tokens, including any comma.\n while (this.tokens.currentIndex() < specifierInfo.endIndex) {\n this.tokens.removeToken();\n }\n if (this.tokens.matches1(tt.comma)) {\n this.tokens.removeToken();\n }\n } else {\n // Non-type export, so copy all tokens, including any comma.\n foundNonTypeExport = true;\n while (this.tokens.currentIndex() < specifierInfo.endIndex) {\n this.tokens.copyToken();\n }\n if (this.tokens.matches1(tt.comma)) {\n this.tokens.copyToken();\n }\n }\n }\n this.tokens.copyExpectedToken(tt.braceR);\n\n if (!this.keepUnusedImports && isReExport && !foundNonTypeExport) {\n // This is a type-only re-export, so skip evaluating the other module. Technically this\n // leaves the statement as `export {}`, but that's ok since that's a no-op.\n this.tokens.removeToken();\n this.tokens.removeToken();\n removeMaybeImportAttributes(this.tokens);\n }\n\n return true;\n }\n\n /**\n * ESM elides all imports with the rule that we only elide if we see that it's\n * a type and never see it as a value. This is in contrast to CJS, which\n * elides imports that are completely unknown.\n */\n shouldElideExportedName(name) {\n return (\n this.isTypeScriptTransformEnabled &&\n !this.keepUnusedImports &&\n this.declarationInfo.typeDeclarations.has(name) &&\n !this.declarationInfo.valueDeclarations.has(name)\n );\n }\n}\n","import {ContextualKeyword} from \"../parser/tokenizer/keywords\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\nimport Transformer from \"./Transformer\";\n\nexport default class FlowTransformer extends Transformer {\n constructor(\n rootTransformer,\n tokens,\n isImportsTransformEnabled,\n ) {\n super();this.rootTransformer = rootTransformer;this.tokens = tokens;this.isImportsTransformEnabled = isImportsTransformEnabled;;\n }\n\n process() {\n if (\n this.rootTransformer.processPossibleArrowParamEnd() ||\n this.rootTransformer.processPossibleAsyncArrowWithTypeParams() ||\n this.rootTransformer.processPossibleTypeRange()\n ) {\n return true;\n }\n if (this.tokens.matches1(tt._enum)) {\n this.processEnum();\n return true;\n }\n if (this.tokens.matches2(tt._export, tt._enum)) {\n this.processNamedExportEnum();\n return true;\n }\n if (this.tokens.matches3(tt._export, tt._default, tt._enum)) {\n this.processDefaultExportEnum();\n return true;\n }\n return false;\n }\n\n /**\n * Handle a declaration like:\n * export enum E ...\n *\n * With this imports transform, this becomes:\n * const E = [[enum]]; exports.E = E;\n *\n * otherwise, it becomes:\n * export const E = [[enum]];\n */\n processNamedExportEnum() {\n if (this.isImportsTransformEnabled) {\n // export\n this.tokens.removeInitialToken();\n const enumName = this.tokens.identifierNameAtRelativeIndex(1);\n this.processEnum();\n this.tokens.appendCode(` exports.${enumName} = ${enumName};`);\n } else {\n this.tokens.copyToken();\n this.processEnum();\n }\n }\n\n /**\n * Handle a declaration like:\n * export default enum E\n *\n * With the imports transform, this becomes:\n * const E = [[enum]]; exports.default = E;\n *\n * otherwise, it becomes:\n * const E = [[enum]]; export default E;\n */\n processDefaultExportEnum() {\n // export\n this.tokens.removeInitialToken();\n // default\n this.tokens.removeToken();\n const enumName = this.tokens.identifierNameAtRelativeIndex(1);\n this.processEnum();\n if (this.isImportsTransformEnabled) {\n this.tokens.appendCode(` exports.default = ${enumName};`);\n } else {\n this.tokens.appendCode(` export default ${enumName};`);\n }\n }\n\n /**\n * Transpile flow enums to invoke the \"flow-enums-runtime\" library.\n *\n * Currently, the transpiled code always uses `require(\"flow-enums-runtime\")`,\n * but if future flexibility is needed, we could expose a config option for\n * this string (similar to configurable JSX). Even when targeting ESM, the\n * default behavior of babel-plugin-transform-flow-enums is to use require\n * rather than injecting an import.\n *\n * Flow enums are quite a bit simpler than TS enums and have some convenient\n * constraints:\n * - Element initializers must be either always present or always absent. That\n * means that we can use fixed lookahead on the first element (if any) and\n * assume that all elements are like that.\n * - The right-hand side of an element initializer must be a literal value,\n * not a complex expression and not referencing other elements. That means\n * we can simply copy a single token.\n *\n * Enums can be broken up into three basic cases:\n *\n * Mirrored enums:\n * enum E {A, B}\n * ->\n * const E = require(\"flow-enums-runtime\").Mirrored([\"A\", \"B\"]);\n *\n * Initializer enums:\n * enum E {A = 1, B = 2}\n * ->\n * const E = require(\"flow-enums-runtime\")({A: 1, B: 2});\n *\n * Symbol enums:\n * enum E of symbol {A, B}\n * ->\n * const E = require(\"flow-enums-runtime\")({A: Symbol(\"A\"), B: Symbol(\"B\")});\n *\n * We can statically detect which of the three cases this is by looking at the\n * \"of\" declaration (if any) and seeing if the first element has an initializer.\n * Since the other transform details are so similar between the three cases, we\n * use a single implementation and vary the transform within processEnumElement\n * based on case.\n */\n processEnum() {\n // enum E -> const E\n this.tokens.replaceToken(\"const\");\n this.tokens.copyExpectedToken(tt.name);\n\n let isSymbolEnum = false;\n if (this.tokens.matchesContextual(ContextualKeyword._of)) {\n this.tokens.removeToken();\n isSymbolEnum = this.tokens.matchesContextual(ContextualKeyword._symbol);\n this.tokens.removeToken();\n }\n const hasInitializers = this.tokens.matches3(tt.braceL, tt.name, tt.eq);\n this.tokens.appendCode(' = require(\"flow-enums-runtime\")');\n\n const isMirrored = !isSymbolEnum && !hasInitializers;\n this.tokens.replaceTokenTrimmingLeftWhitespace(isMirrored ? \".Mirrored([\" : \"({\");\n\n while (!this.tokens.matches1(tt.braceR)) {\n // ... is allowed at the end and has no runtime behavior.\n if (this.tokens.matches1(tt.ellipsis)) {\n this.tokens.removeToken();\n break;\n }\n this.processEnumElement(isSymbolEnum, hasInitializers);\n if (this.tokens.matches1(tt.comma)) {\n this.tokens.copyToken();\n }\n }\n\n this.tokens.replaceToken(isMirrored ? \"]);\" : \"});\");\n }\n\n /**\n * Process an individual enum element, producing either an array element or an\n * object element based on what type of enum this is.\n */\n processEnumElement(isSymbolEnum, hasInitializers) {\n if (isSymbolEnum) {\n // Symbol enums never have initializers and are expanded to object elements.\n // A, -> A: Symbol(\"A\"),\n const elementName = this.tokens.identifierName();\n this.tokens.copyToken();\n this.tokens.appendCode(`: Symbol(\"${elementName}\")`);\n } else if (hasInitializers) {\n // Initializers are expanded to object elements.\n // A = 1, -> A: 1,\n this.tokens.copyToken();\n this.tokens.replaceTokenTrimmingLeftWhitespace(\":\");\n this.tokens.copyToken();\n } else {\n // Enum elements without initializers become string literal array elements.\n // A, -> \"A\",\n this.tokens.replaceToken(`\"${this.tokens.identifierName()}\"`);\n }\n }\n}\n"," function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\n\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\nimport Transformer from \"./Transformer\";\n\nconst JEST_GLOBAL_NAME = \"jest\";\nconst HOISTED_METHODS = [\"mock\", \"unmock\", \"enableAutomock\", \"disableAutomock\"];\n\n/**\n * Implementation of babel-plugin-jest-hoist, which hoists up some jest method\n * calls above the imports to allow them to override other imports.\n *\n * To preserve line numbers, rather than directly moving the jest.mock code, we\n * wrap each invocation in a function statement and then call the function from\n * the top of the file.\n */\nexport default class JestHoistTransformer extends Transformer {\n __init() {this.hoistedFunctionNames = []}\n\n constructor(\n rootTransformer,\n tokens,\n nameManager,\n importProcessor,\n ) {\n super();this.rootTransformer = rootTransformer;this.tokens = tokens;this.nameManager = nameManager;this.importProcessor = importProcessor;JestHoistTransformer.prototype.__init.call(this);;\n }\n\n process() {\n if (\n this.tokens.currentToken().scopeDepth === 0 &&\n this.tokens.matches4(tt.name, tt.dot, tt.name, tt.parenL) &&\n this.tokens.identifierName() === JEST_GLOBAL_NAME\n ) {\n // TODO: This only works if imports transform is active, which it will be for jest.\n // But if jest adds module support and we no longer need the import transform, this needs fixing.\n if (_optionalChain([this, 'access', _ => _.importProcessor, 'optionalAccess', _2 => _2.getGlobalNames, 'call', _3 => _3(), 'optionalAccess', _4 => _4.has, 'call', _5 => _5(JEST_GLOBAL_NAME)])) {\n return false;\n }\n return this.extractHoistedCalls();\n }\n\n return false;\n }\n\n getHoistedCode() {\n if (this.hoistedFunctionNames.length > 0) {\n // This will be placed before module interop code, but that's fine since\n // imports aren't allowed in module mock factories.\n return this.hoistedFunctionNames.map((name) => `${name}();`).join(\"\");\n }\n return \"\";\n }\n\n /**\n * Extracts any methods calls on the jest-object that should be hoisted.\n *\n * According to the jest docs, https://jestjs.io/docs/en/jest-object#jestmockmodulename-factory-options,\n * mock, unmock, enableAutomock, disableAutomock, are the methods that should be hoisted.\n *\n * We do not apply the same checks of the arguments as babel-plugin-jest-hoist does.\n */\n extractHoistedCalls() {\n // We're handling a chain of calls where `jest` may or may not need to be inserted for each call\n // in the chain, so remove the initial `jest` to make the loop implementation cleaner.\n this.tokens.removeToken();\n // Track some state so that multiple non-hoisted chained calls in a row keep their chaining\n // syntax.\n let followsNonHoistedJestCall = false;\n\n // Iterate through all chained calls on the jest object.\n while (this.tokens.matches3(tt.dot, tt.name, tt.parenL)) {\n const methodName = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1);\n const shouldHoist = HOISTED_METHODS.includes(methodName);\n if (shouldHoist) {\n // We've matched e.g. `.mock(...)` or similar call.\n // Replace the initial `.` with `function __jestHoist(){jest.`\n const hoistedFunctionName = this.nameManager.claimFreeName(\"__jestHoist\");\n this.hoistedFunctionNames.push(hoistedFunctionName);\n this.tokens.replaceToken(`function ${hoistedFunctionName}(){${JEST_GLOBAL_NAME}.`);\n this.tokens.copyToken();\n this.tokens.copyToken();\n this.rootTransformer.processBalancedCode();\n this.tokens.copyExpectedToken(tt.parenR);\n this.tokens.appendCode(\";}\");\n followsNonHoistedJestCall = false;\n } else {\n // This is a non-hoisted method, so just transform the code as usual.\n if (followsNonHoistedJestCall) {\n // If we didn't hoist the previous call, we can leave the code as-is to chain off of the\n // previous method call. It's important to preserve the code here because we don't know\n // for sure that the method actually returned the jest object for chaining.\n this.tokens.copyToken();\n } else {\n // If we hoisted the previous call, we know it returns the jest object back, so we insert\n // the identifier `jest` to continue the chain.\n this.tokens.replaceToken(`${JEST_GLOBAL_NAME}.`);\n }\n this.tokens.copyToken();\n this.tokens.copyToken();\n this.rootTransformer.processBalancedCode();\n this.tokens.copyExpectedToken(tt.parenR);\n followsNonHoistedJestCall = true;\n }\n }\n\n return true;\n }\n}\n","import {TokenType as tt} from \"../parser/tokenizer/types\";\n\nimport Transformer from \"./Transformer\";\n\nexport default class NumericSeparatorTransformer extends Transformer {\n constructor( tokens) {\n super();this.tokens = tokens;;\n }\n\n process() {\n if (this.tokens.matches1(tt.num)) {\n const code = this.tokens.currentTokenCode();\n if (code.includes(\"_\")) {\n this.tokens.replaceToken(code.replace(/_/g, \"\"));\n return true;\n }\n }\n return false;\n }\n}\n","\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\nimport Transformer from \"./Transformer\";\n\nexport default class OptionalCatchBindingTransformer extends Transformer {\n constructor( tokens, nameManager) {\n super();this.tokens = tokens;this.nameManager = nameManager;;\n }\n\n process() {\n if (this.tokens.matches2(tt._catch, tt.braceL)) {\n this.tokens.copyToken();\n this.tokens.appendCode(` (${this.nameManager.claimFreeName(\"e\")})`);\n return true;\n }\n return false;\n }\n}\n","\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\nimport Transformer from \"./Transformer\";\n\n/**\n * Transformer supporting the optional chaining and nullish coalescing operators.\n *\n * Tech plan here:\n * https://github.com/alangpierce/sucrase/wiki/Sucrase-Optional-Chaining-and-Nullish-Coalescing-Technical-Plan\n *\n * The prefix and suffix code snippets are handled by TokenProcessor, and this transformer handles\n * the operators themselves.\n */\nexport default class OptionalChainingNullishTransformer extends Transformer {\n constructor( tokens, nameManager) {\n super();this.tokens = tokens;this.nameManager = nameManager;;\n }\n\n process() {\n if (this.tokens.matches1(tt.nullishCoalescing)) {\n const token = this.tokens.currentToken();\n if (this.tokens.tokens[token.nullishStartIndex].isAsyncOperation) {\n this.tokens.replaceTokenTrimmingLeftWhitespace(\", async () => (\");\n } else {\n this.tokens.replaceTokenTrimmingLeftWhitespace(\", () => (\");\n }\n return true;\n }\n if (this.tokens.matches1(tt._delete)) {\n const nextToken = this.tokens.tokenAtRelativeIndex(1);\n if (nextToken.isOptionalChainStart) {\n this.tokens.removeInitialToken();\n return true;\n }\n }\n const token = this.tokens.currentToken();\n const chainStart = token.subscriptStartIndex;\n if (\n chainStart != null &&\n this.tokens.tokens[chainStart].isOptionalChainStart &&\n // Super subscripts can't be optional (since super is never null/undefined), and the syntax\n // relies on the subscript being intact, so leave this token alone.\n this.tokens.tokenAtRelativeIndex(-1).type !== tt._super\n ) {\n const param = this.nameManager.claimFreeName(\"_\");\n let arrowStartSnippet;\n if (\n chainStart > 0 &&\n this.tokens.matches1AtIndex(chainStart - 1, tt._delete) &&\n this.isLastSubscriptInChain()\n ) {\n // Delete operations are special: we already removed the delete keyword, and to still\n // perform a delete, we need to insert a delete in the very last part of the chain, which\n // in correct code will always be a property access.\n arrowStartSnippet = `${param} => delete ${param}`;\n } else {\n arrowStartSnippet = `${param} => ${param}`;\n }\n if (this.tokens.tokens[chainStart].isAsyncOperation) {\n arrowStartSnippet = `async ${arrowStartSnippet}`;\n }\n if (\n this.tokens.matches2(tt.questionDot, tt.parenL) ||\n this.tokens.matches2(tt.questionDot, tt.lessThan)\n ) {\n if (this.justSkippedSuper()) {\n this.tokens.appendCode(\".bind(this)\");\n }\n this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalCall', ${arrowStartSnippet}`);\n } else if (this.tokens.matches2(tt.questionDot, tt.bracketL)) {\n this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${arrowStartSnippet}`);\n } else if (this.tokens.matches1(tt.questionDot)) {\n this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${arrowStartSnippet}.`);\n } else if (this.tokens.matches1(tt.dot)) {\n this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${arrowStartSnippet}.`);\n } else if (this.tokens.matches1(tt.bracketL)) {\n this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${arrowStartSnippet}[`);\n } else if (this.tokens.matches1(tt.parenL)) {\n if (this.justSkippedSuper()) {\n this.tokens.appendCode(\".bind(this)\");\n }\n this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'call', ${arrowStartSnippet}(`);\n } else {\n throw new Error(\"Unexpected subscript operator in optional chain.\");\n }\n return true;\n }\n return false;\n }\n\n /**\n * Determine if the current token is the last of its chain, so that we know whether it's eligible\n * to have a delete op inserted.\n *\n * We can do this by walking forward until we determine one way or another. Each\n * isOptionalChainStart token must be paired with exactly one isOptionalChainEnd token after it in\n * a nesting way, so we can track depth and walk to the end of the chain (the point where the\n * depth goes negative) and see if any other subscript token is after us in the chain.\n */\n isLastSubscriptInChain() {\n let depth = 0;\n for (let i = this.tokens.currentIndex() + 1; ; i++) {\n if (i >= this.tokens.tokens.length) {\n throw new Error(\"Reached the end of the code while finding the end of the access chain.\");\n }\n if (this.tokens.tokens[i].isOptionalChainStart) {\n depth++;\n } else if (this.tokens.tokens[i].isOptionalChainEnd) {\n depth--;\n }\n if (depth < 0) {\n return true;\n }\n\n // This subscript token is a later one in the same chain.\n if (depth === 0 && this.tokens.tokens[i].subscriptStartIndex != null) {\n return false;\n }\n }\n }\n\n /**\n * Determine if we are the open-paren in an expression like super.a()?.b.\n *\n * We can do this by walking backward to find the previous subscript. If that subscript was\n * preceded by a super, then we must be the subscript after it, so if this is a call expression,\n * we'll need to attach the right context.\n */\n justSkippedSuper() {\n let depth = 0;\n let index = this.tokens.currentIndex() - 1;\n while (true) {\n if (index < 0) {\n throw new Error(\n \"Reached the start of the code while finding the start of the access chain.\",\n );\n }\n if (this.tokens.tokens[index].isOptionalChainStart) {\n depth--;\n } else if (this.tokens.tokens[index].isOptionalChainEnd) {\n depth++;\n }\n if (depth < 0) {\n return false;\n }\n\n // This subscript token is a later one in the same chain.\n if (depth === 0 && this.tokens.tokens[index].subscriptStartIndex != null) {\n return this.tokens.tokens[index - 1].type === tt._super;\n }\n index--;\n }\n }\n}\n","\n\nimport {IdentifierRole} from \"../parser/tokenizer\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\n\nimport Transformer from \"./Transformer\";\n\n/**\n * Implementation of babel-plugin-transform-react-display-name, which adds a\n * display name to usages of React.createClass and createReactClass.\n */\nexport default class ReactDisplayNameTransformer extends Transformer {\n constructor(\n rootTransformer,\n tokens,\n importProcessor,\n options,\n ) {\n super();this.rootTransformer = rootTransformer;this.tokens = tokens;this.importProcessor = importProcessor;this.options = options;;\n }\n\n process() {\n const startIndex = this.tokens.currentIndex();\n if (this.tokens.identifierName() === \"createReactClass\") {\n const newName =\n this.importProcessor && this.importProcessor.getIdentifierReplacement(\"createReactClass\");\n if (newName) {\n this.tokens.replaceToken(`(0, ${newName})`);\n } else {\n this.tokens.copyToken();\n }\n this.tryProcessCreateClassCall(startIndex);\n return true;\n }\n if (\n this.tokens.matches3(tt.name, tt.dot, tt.name) &&\n this.tokens.identifierName() === \"React\" &&\n this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 2) === \"createClass\"\n ) {\n const newName = this.importProcessor\n ? this.importProcessor.getIdentifierReplacement(\"React\") || \"React\"\n : \"React\";\n if (newName) {\n this.tokens.replaceToken(newName);\n this.tokens.copyToken();\n this.tokens.copyToken();\n } else {\n this.tokens.copyToken();\n this.tokens.copyToken();\n this.tokens.copyToken();\n }\n this.tryProcessCreateClassCall(startIndex);\n return true;\n }\n return false;\n }\n\n /**\n * This is called with the token position at the open-paren.\n */\n tryProcessCreateClassCall(startIndex) {\n const displayName = this.findDisplayName(startIndex);\n if (!displayName) {\n return;\n }\n\n if (this.classNeedsDisplayName()) {\n this.tokens.copyExpectedToken(tt.parenL);\n this.tokens.copyExpectedToken(tt.braceL);\n this.tokens.appendCode(`displayName: '${displayName}',`);\n this.rootTransformer.processBalancedCode();\n this.tokens.copyExpectedToken(tt.braceR);\n this.tokens.copyExpectedToken(tt.parenR);\n }\n }\n\n findDisplayName(startIndex) {\n if (startIndex < 2) {\n return null;\n }\n if (this.tokens.matches2AtIndex(startIndex - 2, tt.name, tt.eq)) {\n // This is an assignment (or declaration) and the LHS is either an identifier or a member\n // expression ending in an identifier, so use that identifier name.\n return this.tokens.identifierNameAtIndex(startIndex - 2);\n }\n if (\n startIndex >= 2 &&\n this.tokens.tokens[startIndex - 2].identifierRole === IdentifierRole.ObjectKey\n ) {\n // This is an object literal value.\n return this.tokens.identifierNameAtIndex(startIndex - 2);\n }\n if (this.tokens.matches2AtIndex(startIndex - 2, tt._export, tt._default)) {\n return this.getDisplayNameFromFilename();\n }\n return null;\n }\n\n getDisplayNameFromFilename() {\n const filePath = this.options.filePath || \"unknown\";\n const pathSegments = filePath.split(\"/\");\n const filename = pathSegments[pathSegments.length - 1];\n const dotIndex = filename.lastIndexOf(\".\");\n const baseFilename = dotIndex === -1 ? filename : filename.slice(0, dotIndex);\n if (baseFilename === \"index\" && pathSegments[pathSegments.length - 2]) {\n return pathSegments[pathSegments.length - 2];\n } else {\n return baseFilename;\n }\n }\n\n /**\n * We only want to add a display name when this is a function call containing\n * one argument, which is an object literal without `displayName` as an\n * existing key.\n */\n classNeedsDisplayName() {\n let index = this.tokens.currentIndex();\n if (!this.tokens.matches2(tt.parenL, tt.braceL)) {\n return false;\n }\n // The block starts on the {, and we expect any displayName key to be in\n // that context. We need to ignore other other contexts to avoid matching\n // nested displayName keys.\n const objectStartIndex = index + 1;\n const objectContextId = this.tokens.tokens[objectStartIndex].contextId;\n if (objectContextId == null) {\n throw new Error(\"Expected non-null context ID on object open-brace.\");\n }\n\n for (; index < this.tokens.tokens.length; index++) {\n const token = this.tokens.tokens[index];\n if (token.type === tt.braceR && token.contextId === objectContextId) {\n index++;\n break;\n }\n\n if (\n this.tokens.identifierNameAtIndex(index) === \"displayName\" &&\n this.tokens.tokens[index].identifierRole === IdentifierRole.ObjectKey &&\n token.contextId === objectContextId\n ) {\n // We found a displayName key, so bail out.\n return false;\n }\n }\n\n if (index === this.tokens.tokens.length) {\n throw new Error(\"Unexpected end of input when processing React class.\");\n }\n\n // If we got this far, we know we have createClass with an object with no\n // display name, so we want to proceed as long as that was the only argument.\n return (\n this.tokens.matches1AtIndex(index, tt.parenR) ||\n this.tokens.matches2AtIndex(index, tt.comma, tt.parenR)\n );\n }\n}\n","import {IdentifierRole, isTopLevelDeclaration} from \"../parser/tokenizer\";\n\nimport Transformer from \"./Transformer\";\n\nexport default class ReactHotLoaderTransformer extends Transformer {\n __init() {this.extractedDefaultExportName = null}\n\n constructor( tokens, filePath) {\n super();this.tokens = tokens;this.filePath = filePath;ReactHotLoaderTransformer.prototype.__init.call(this);;\n }\n\n setExtractedDefaultExportName(extractedDefaultExportName) {\n this.extractedDefaultExportName = extractedDefaultExportName;\n }\n\n getPrefixCode() {\n return `\n (function () {\n var enterModule = require('react-hot-loader').enterModule;\n enterModule && enterModule(module);\n })();`\n .replace(/\\s+/g, \" \")\n .trim();\n }\n\n getSuffixCode() {\n const topLevelNames = new Set();\n for (const token of this.tokens.tokens) {\n if (\n !token.isType &&\n isTopLevelDeclaration(token) &&\n token.identifierRole !== IdentifierRole.ImportDeclaration\n ) {\n topLevelNames.add(this.tokens.identifierNameForToken(token));\n }\n }\n const namesToRegister = Array.from(topLevelNames).map((name) => ({\n variableName: name,\n uniqueLocalName: name,\n }));\n if (this.extractedDefaultExportName) {\n namesToRegister.push({\n variableName: this.extractedDefaultExportName,\n uniqueLocalName: \"default\",\n });\n }\n return `\n;(function () {\n var reactHotLoader = require('react-hot-loader').default;\n var leaveModule = require('react-hot-loader').leaveModule;\n if (!reactHotLoader) {\n return;\n }\n${namesToRegister\n .map(\n ({variableName, uniqueLocalName}) =>\n ` reactHotLoader.register(${variableName}, \"${uniqueLocalName}\", ${JSON.stringify(\n this.filePath || \"\",\n )});`,\n )\n .join(\"\\n\")}\n leaveModule(module);\n})();`;\n }\n\n process() {\n return false;\n }\n}\n","import {IS_IDENTIFIER_CHAR, IS_IDENTIFIER_START} from \"../parser/util/identifier\";\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar\n// Hard-code a list of reserved words rather than trying to use keywords or contextual keywords\n// from the parser, since currently there are various exceptions, like `package` being reserved\n// but unused and various contextual keywords being reserved. Note that we assume that all code\n// compiled by Sucrase is in a module, so strict mode words and await are all considered reserved\n// here.\nconst RESERVED_WORDS = new Set([\n // Reserved keywords as of ECMAScript 2015\n \"break\",\n \"case\",\n \"catch\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"export\",\n \"extends\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"return\",\n \"super\",\n \"switch\",\n \"this\",\n \"throw\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"while\",\n \"with\",\n \"yield\",\n // Future reserved keywords\n \"enum\",\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"await\",\n // Literals that cannot be used as identifiers\n \"false\",\n \"null\",\n \"true\",\n]);\n\n/**\n * Determine if the given name is a legal variable name.\n *\n * This is needed when transforming TypeScript enums; if an enum key is a valid\n * variable name, it might be referenced later in the enum, so we need to\n * declare a variable.\n */\nexport default function isIdentifier(name) {\n if (name.length === 0) {\n return false;\n }\n if (!IS_IDENTIFIER_START[name.charCodeAt(0)]) {\n return false;\n }\n for (let i = 1; i < name.length; i++) {\n if (!IS_IDENTIFIER_CHAR[name.charCodeAt(i)]) {\n return false;\n }\n }\n return !RESERVED_WORDS.has(name);\n}\n","\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\nimport isIdentifier from \"../util/isIdentifier\";\n\nimport Transformer from \"./Transformer\";\n\nexport default class TypeScriptTransformer extends Transformer {\n constructor(\n rootTransformer,\n tokens,\n isImportsTransformEnabled,\n ) {\n super();this.rootTransformer = rootTransformer;this.tokens = tokens;this.isImportsTransformEnabled = isImportsTransformEnabled;;\n }\n\n process() {\n if (\n this.rootTransformer.processPossibleArrowParamEnd() ||\n this.rootTransformer.processPossibleAsyncArrowWithTypeParams() ||\n this.rootTransformer.processPossibleTypeRange()\n ) {\n return true;\n }\n if (\n this.tokens.matches1(tt._public) ||\n this.tokens.matches1(tt._protected) ||\n this.tokens.matches1(tt._private) ||\n this.tokens.matches1(tt._abstract) ||\n this.tokens.matches1(tt._readonly) ||\n this.tokens.matches1(tt._override) ||\n this.tokens.matches1(tt.nonNullAssertion)\n ) {\n this.tokens.removeInitialToken();\n return true;\n }\n if (this.tokens.matches1(tt._enum) || this.tokens.matches2(tt._const, tt._enum)) {\n this.processEnum();\n return true;\n }\n if (\n this.tokens.matches2(tt._export, tt._enum) ||\n this.tokens.matches3(tt._export, tt._const, tt._enum)\n ) {\n this.processEnum(true);\n return true;\n }\n return false;\n }\n\n processEnum(isExport = false) {\n // We might have \"export const enum\", so just remove all relevant tokens.\n this.tokens.removeInitialToken();\n while (this.tokens.matches1(tt._const) || this.tokens.matches1(tt._enum)) {\n this.tokens.removeToken();\n }\n const enumName = this.tokens.identifierName();\n this.tokens.removeToken();\n if (isExport && !this.isImportsTransformEnabled) {\n this.tokens.appendCode(\"export \");\n }\n this.tokens.appendCode(`var ${enumName}; (function (${enumName})`);\n this.tokens.copyExpectedToken(tt.braceL);\n this.processEnumBody(enumName);\n this.tokens.copyExpectedToken(tt.braceR);\n if (isExport && this.isImportsTransformEnabled) {\n this.tokens.appendCode(`)(${enumName} || (exports.${enumName} = ${enumName} = {}));`);\n } else {\n this.tokens.appendCode(`)(${enumName} || (${enumName} = {}));`);\n }\n }\n\n /**\n * Transform an enum into equivalent JS. This has complexity in a few places:\n * - TS allows string enums, numeric enums, and a mix of the two styles within an enum.\n * - Enum keys are allowed to be referenced in later enum values.\n * - Enum keys are allowed to be strings.\n * - When enum values are omitted, they should follow an auto-increment behavior.\n */\n processEnumBody(enumName) {\n // Code that can be used to reference the previous enum member, or null if this is the first\n // enum member.\n let previousValueCode = null;\n while (true) {\n if (this.tokens.matches1(tt.braceR)) {\n break;\n }\n const {nameStringCode, variableName} = this.extractEnumKeyInfo(this.tokens.currentToken());\n this.tokens.removeInitialToken();\n\n if (\n this.tokens.matches3(tt.eq, tt.string, tt.comma) ||\n this.tokens.matches3(tt.eq, tt.string, tt.braceR)\n ) {\n this.processStringLiteralEnumMember(enumName, nameStringCode, variableName);\n } else if (this.tokens.matches1(tt.eq)) {\n this.processExplicitValueEnumMember(enumName, nameStringCode, variableName);\n } else {\n this.processImplicitValueEnumMember(\n enumName,\n nameStringCode,\n variableName,\n previousValueCode,\n );\n }\n if (this.tokens.matches1(tt.comma)) {\n this.tokens.removeToken();\n }\n\n if (variableName != null) {\n previousValueCode = variableName;\n } else {\n previousValueCode = `${enumName}[${nameStringCode}]`;\n }\n }\n }\n\n /**\n * Detect name information about this enum key, which will be used to determine which code to emit\n * and whether we should declare a variable as part of this declaration.\n *\n * Some cases to keep in mind:\n * - Enum keys can be implicitly referenced later, e.g. `X = 1, Y = X`. In Sucrase, we implement\n * this by declaring a variable `X` so that later expressions can use it.\n * - In addition to the usual identifier key syntax, enum keys are allowed to be string literals,\n * e.g. `\"hello world\" = 3,`. Template literal syntax is NOT allowed.\n * - Even if the enum key is defined as a string literal, it may still be referenced by identifier\n * later, e.g. `\"X\" = 1, Y = X`. That means that we need to detect whether or not a string\n * literal is identifier-like and emit a variable if so, even if the declaration did not use an\n * identifier.\n * - Reserved keywords like `break` are valid enum keys, but are not valid to be referenced later\n * and would be a syntax error if we emitted a variable, so we need to skip the variable\n * declaration in those cases.\n *\n * The variableName return value captures these nuances: if non-null, we can and must emit a\n * variable declaration, and if null, we can't and shouldn't.\n */\n extractEnumKeyInfo(nameToken) {\n if (nameToken.type === tt.name) {\n const name = this.tokens.identifierNameForToken(nameToken);\n return {\n nameStringCode: `\"${name}\"`,\n variableName: isIdentifier(name) ? name : null,\n };\n } else if (nameToken.type === tt.string) {\n const name = this.tokens.stringValueForToken(nameToken);\n return {\n nameStringCode: this.tokens.code.slice(nameToken.start, nameToken.end),\n variableName: isIdentifier(name) ? name : null,\n };\n } else {\n throw new Error(\"Expected name or string at beginning of enum element.\");\n }\n }\n\n /**\n * Handle an enum member where the RHS is just a string literal (not omitted, not a number, and\n * not a complex expression). This is the typical form for TS string enums, and in this case, we\n * do *not* create a reverse mapping.\n *\n * This is called after deleting the key token, when the token processor is at the equals sign.\n *\n * Example 1:\n * someKey = \"some value\"\n * ->\n * const someKey = \"some value\"; MyEnum[\"someKey\"] = someKey;\n *\n * Example 2:\n * \"some key\" = \"some value\"\n * ->\n * MyEnum[\"some key\"] = \"some value\";\n */\n processStringLiteralEnumMember(\n enumName,\n nameStringCode,\n variableName,\n ) {\n if (variableName != null) {\n this.tokens.appendCode(`const ${variableName}`);\n // =\n this.tokens.copyToken();\n // value string\n this.tokens.copyToken();\n this.tokens.appendCode(`; ${enumName}[${nameStringCode}] = ${variableName};`);\n } else {\n this.tokens.appendCode(`${enumName}[${nameStringCode}]`);\n // =\n this.tokens.copyToken();\n // value string\n this.tokens.copyToken();\n this.tokens.appendCode(\";\");\n }\n }\n\n /**\n * Handle an enum member initialized with an expression on the right-hand side (other than a\n * string literal). In these cases, we should transform the expression and emit code that sets up\n * a reverse mapping.\n *\n * The TypeScript implementation of this operation distinguishes between expressions that can be\n * \"constant folded\" at compile time (i.e. consist of number literals and simple math operations\n * on those numbers) and ones that are dynamic. For constant expressions, it emits the resolved\n * numeric value, and auto-incrementing is only allowed in that case. Evaluating expressions at\n * compile time would add significant complexity to Sucrase, so Sucrase instead leaves the\n * expression as-is, and will later emit something like `MyEnum[\"previousKey\"] + 1` to implement\n * auto-incrementing.\n *\n * This is called after deleting the key token, when the token processor is at the equals sign.\n *\n * Example 1:\n * someKey = 1 + 1\n * ->\n * const someKey = 1 + 1; MyEnum[MyEnum[\"someKey\"] = someKey] = \"someKey\";\n *\n * Example 2:\n * \"some key\" = 1 + 1\n * ->\n * MyEnum[MyEnum[\"some key\"] = 1 + 1] = \"some key\";\n */\n processExplicitValueEnumMember(\n enumName,\n nameStringCode,\n variableName,\n ) {\n const rhsEndIndex = this.tokens.currentToken().rhsEndIndex;\n if (rhsEndIndex == null) {\n throw new Error(\"Expected rhsEndIndex on enum assign.\");\n }\n\n if (variableName != null) {\n this.tokens.appendCode(`const ${variableName}`);\n this.tokens.copyToken();\n while (this.tokens.currentIndex() < rhsEndIndex) {\n this.rootTransformer.processToken();\n }\n this.tokens.appendCode(\n `; ${enumName}[${enumName}[${nameStringCode}] = ${variableName}] = ${nameStringCode};`,\n );\n } else {\n this.tokens.appendCode(`${enumName}[${enumName}[${nameStringCode}]`);\n this.tokens.copyToken();\n while (this.tokens.currentIndex() < rhsEndIndex) {\n this.rootTransformer.processToken();\n }\n this.tokens.appendCode(`] = ${nameStringCode};`);\n }\n }\n\n /**\n * Handle an enum member with no right-hand side expression. In this case, the value is the\n * previous value plus 1, or 0 if there was no previous value. We should also always emit a\n * reverse mapping.\n *\n * Example 1:\n * someKey2\n * ->\n * const someKey2 = someKey1 + 1; MyEnum[MyEnum[\"someKey2\"] = someKey2] = \"someKey2\";\n *\n * Example 2:\n * \"some key 2\"\n * ->\n * MyEnum[MyEnum[\"some key 2\"] = someKey1 + 1] = \"some key 2\";\n */\n processImplicitValueEnumMember(\n enumName,\n nameStringCode,\n variableName,\n previousValueCode,\n ) {\n let valueCode = previousValueCode != null ? `${previousValueCode} + 1` : \"0\";\n if (variableName != null) {\n this.tokens.appendCode(`const ${variableName} = ${valueCode}; `);\n valueCode = variableName;\n }\n this.tokens.appendCode(\n `${enumName}[${enumName}[${nameStringCode}] = ${valueCode}] = ${nameStringCode};`,\n );\n }\n}\n","\n\n\nimport {ContextualKeyword} from \"../parser/tokenizer/keywords\";\nimport {TokenType as tt} from \"../parser/tokenizer/types\";\n\nimport getClassInfo, {} from \"../util/getClassInfo\";\nimport CJSImportTransformer from \"./CJSImportTransformer\";\nimport ESMImportTransformer from \"./ESMImportTransformer\";\nimport FlowTransformer from \"./FlowTransformer\";\nimport JestHoistTransformer from \"./JestHoistTransformer\";\nimport JSXTransformer from \"./JSXTransformer\";\nimport NumericSeparatorTransformer from \"./NumericSeparatorTransformer\";\nimport OptionalCatchBindingTransformer from \"./OptionalCatchBindingTransformer\";\nimport OptionalChainingNullishTransformer from \"./OptionalChainingNullishTransformer\";\nimport ReactDisplayNameTransformer from \"./ReactDisplayNameTransformer\";\nimport ReactHotLoaderTransformer from \"./ReactHotLoaderTransformer\";\n\nimport TypeScriptTransformer from \"./TypeScriptTransformer\";\n\n\n\n\n\n\n\n\nexport default class RootTransformer {\n __init() {this.transformers = []}\n \n \n __init2() {this.generatedVariables = []}\n \n \n \n \n\n constructor(\n sucraseContext,\n transforms,\n enableLegacyBabel5ModuleInterop,\n options,\n ) {;RootTransformer.prototype.__init.call(this);RootTransformer.prototype.__init2.call(this);\n this.nameManager = sucraseContext.nameManager;\n this.helperManager = sucraseContext.helperManager;\n const {tokenProcessor, importProcessor} = sucraseContext;\n this.tokens = tokenProcessor;\n this.isImportsTransformEnabled = transforms.includes(\"imports\");\n this.isReactHotLoaderTransformEnabled = transforms.includes(\"react-hot-loader\");\n this.disableESTransforms = Boolean(options.disableESTransforms);\n\n if (!options.disableESTransforms) {\n this.transformers.push(\n new OptionalChainingNullishTransformer(tokenProcessor, this.nameManager),\n );\n this.transformers.push(new NumericSeparatorTransformer(tokenProcessor));\n this.transformers.push(new OptionalCatchBindingTransformer(tokenProcessor, this.nameManager));\n }\n\n if (transforms.includes(\"jsx\")) {\n if (options.jsxRuntime !== \"preserve\") {\n this.transformers.push(\n new JSXTransformer(this, tokenProcessor, importProcessor, this.nameManager, options),\n );\n }\n this.transformers.push(\n new ReactDisplayNameTransformer(this, tokenProcessor, importProcessor, options),\n );\n }\n\n let reactHotLoaderTransformer = null;\n if (transforms.includes(\"react-hot-loader\")) {\n if (!options.filePath) {\n throw new Error(\"filePath is required when using the react-hot-loader transform.\");\n }\n reactHotLoaderTransformer = new ReactHotLoaderTransformer(tokenProcessor, options.filePath);\n this.transformers.push(reactHotLoaderTransformer);\n }\n\n // Note that we always want to enable the imports transformer, even when the import transform\n // itself isn't enabled, since we need to do type-only import pruning for both Flow and\n // TypeScript.\n if (transforms.includes(\"imports\")) {\n if (importProcessor === null) {\n throw new Error(\"Expected non-null importProcessor with imports transform enabled.\");\n }\n this.transformers.push(\n new CJSImportTransformer(\n this,\n tokenProcessor,\n importProcessor,\n this.nameManager,\n this.helperManager,\n reactHotLoaderTransformer,\n enableLegacyBabel5ModuleInterop,\n Boolean(options.enableLegacyTypeScriptModuleInterop),\n transforms.includes(\"typescript\"),\n transforms.includes(\"flow\"),\n Boolean(options.preserveDynamicImport),\n Boolean(options.keepUnusedImports),\n ),\n );\n } else {\n this.transformers.push(\n new ESMImportTransformer(\n tokenProcessor,\n this.nameManager,\n this.helperManager,\n reactHotLoaderTransformer,\n transforms.includes(\"typescript\"),\n transforms.includes(\"flow\"),\n Boolean(options.keepUnusedImports),\n options,\n ),\n );\n }\n\n if (transforms.includes(\"flow\")) {\n this.transformers.push(\n new FlowTransformer(this, tokenProcessor, transforms.includes(\"imports\")),\n );\n }\n if (transforms.includes(\"typescript\")) {\n this.transformers.push(\n new TypeScriptTransformer(this, tokenProcessor, transforms.includes(\"imports\")),\n );\n }\n if (transforms.includes(\"jest\")) {\n this.transformers.push(\n new JestHoistTransformer(this, tokenProcessor, this.nameManager, importProcessor),\n );\n }\n }\n\n transform() {\n this.tokens.reset();\n this.processBalancedCode();\n const shouldAddUseStrict = this.isImportsTransformEnabled;\n // \"use strict\" always needs to be first, so override the normal transformer order.\n let prefix = shouldAddUseStrict ? '\"use strict\";' : \"\";\n for (const transformer of this.transformers) {\n prefix += transformer.getPrefixCode();\n }\n prefix += this.helperManager.emitHelpers();\n prefix += this.generatedVariables.map((v) => ` var ${v};`).join(\"\");\n for (const transformer of this.transformers) {\n prefix += transformer.getHoistedCode();\n }\n let suffix = \"\";\n for (const transformer of this.transformers) {\n suffix += transformer.getSuffixCode();\n }\n const result = this.tokens.finish();\n let {code} = result;\n if (code.startsWith(\"#!\")) {\n let newlineIndex = code.indexOf(\"\\n\");\n if (newlineIndex === -1) {\n newlineIndex = code.length;\n code += \"\\n\";\n }\n return {\n code: code.slice(0, newlineIndex + 1) + prefix + code.slice(newlineIndex + 1) + suffix,\n // The hashbang line has no tokens, so shifting the tokens to account\n // for prefix can happen normally.\n mappings: this.shiftMappings(result.mappings, prefix.length),\n };\n } else {\n return {\n code: prefix + code + suffix,\n mappings: this.shiftMappings(result.mappings, prefix.length),\n };\n }\n }\n\n processBalancedCode() {\n let braceDepth = 0;\n let parenDepth = 0;\n while (!this.tokens.isAtEnd()) {\n if (this.tokens.matches1(tt.braceL) || this.tokens.matches1(tt.dollarBraceL)) {\n braceDepth++;\n } else if (this.tokens.matches1(tt.braceR)) {\n if (braceDepth === 0) {\n return;\n }\n braceDepth--;\n }\n if (this.tokens.matches1(tt.parenL)) {\n parenDepth++;\n } else if (this.tokens.matches1(tt.parenR)) {\n if (parenDepth === 0) {\n return;\n }\n parenDepth--;\n }\n this.processToken();\n }\n }\n\n processToken() {\n if (this.tokens.matches1(tt._class)) {\n this.processClass();\n return;\n }\n for (const transformer of this.transformers) {\n const wasProcessed = transformer.process();\n if (wasProcessed) {\n return;\n }\n }\n this.tokens.copyToken();\n }\n\n /**\n * Skip past a class with a name and return that name.\n */\n processNamedClass() {\n if (!this.tokens.matches2(tt._class, tt.name)) {\n throw new Error(\"Expected identifier for exported class name.\");\n }\n const name = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1);\n this.processClass();\n return name;\n }\n\n processClass() {\n const classInfo = getClassInfo(this, this.tokens, this.nameManager, this.disableESTransforms);\n\n // Both static and instance initializers need a class name to use to invoke the initializer, so\n // assign to one if necessary.\n const needsCommaExpression =\n (classInfo.headerInfo.isExpression || !classInfo.headerInfo.className) &&\n classInfo.staticInitializerNames.length + classInfo.instanceInitializerNames.length > 0;\n\n let className = classInfo.headerInfo.className;\n if (needsCommaExpression) {\n className = this.nameManager.claimFreeName(\"_class\");\n this.generatedVariables.push(className);\n this.tokens.appendCode(` (${className} =`);\n }\n\n const classToken = this.tokens.currentToken();\n const contextId = classToken.contextId;\n if (contextId == null) {\n throw new Error(\"Expected class to have a context ID.\");\n }\n this.tokens.copyExpectedToken(tt._class);\n while (!this.tokens.matchesContextIdAndLabel(tt.braceL, contextId)) {\n this.processToken();\n }\n\n this.processClassBody(classInfo, className);\n\n const staticInitializerStatements = classInfo.staticInitializerNames.map(\n (name) => `${className}.${name}()`,\n );\n if (needsCommaExpression) {\n this.tokens.appendCode(\n `, ${staticInitializerStatements.map((s) => `${s}, `).join(\"\")}${className})`,\n );\n } else if (classInfo.staticInitializerNames.length > 0) {\n this.tokens.appendCode(` ${staticInitializerStatements.map((s) => `${s};`).join(\" \")}`);\n }\n }\n\n /**\n * We want to just handle class fields in all contexts, since TypeScript supports them. Later,\n * when some JS implementations support class fields, this should be made optional.\n */\n processClassBody(classInfo, className) {\n const {\n headerInfo,\n constructorInsertPos,\n constructorInitializerStatements,\n fields,\n instanceInitializerNames,\n rangesToRemove,\n } = classInfo;\n let fieldIndex = 0;\n let rangeToRemoveIndex = 0;\n const classContextId = this.tokens.currentToken().contextId;\n if (classContextId == null) {\n throw new Error(\"Expected non-null context ID on class.\");\n }\n this.tokens.copyExpectedToken(tt.braceL);\n if (this.isReactHotLoaderTransformEnabled) {\n this.tokens.appendCode(\n \"__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}\",\n );\n }\n\n const needsConstructorInit =\n constructorInitializerStatements.length + instanceInitializerNames.length > 0;\n\n if (constructorInsertPos === null && needsConstructorInit) {\n const constructorInitializersCode = this.makeConstructorInitCode(\n constructorInitializerStatements,\n instanceInitializerNames,\n className,\n );\n if (headerInfo.hasSuperclass) {\n const argsName = this.nameManager.claimFreeName(\"args\");\n this.tokens.appendCode(\n `constructor(...${argsName}) { super(...${argsName}); ${constructorInitializersCode}; }`,\n );\n } else {\n this.tokens.appendCode(`constructor() { ${constructorInitializersCode}; }`);\n }\n }\n\n while (!this.tokens.matchesContextIdAndLabel(tt.braceR, classContextId)) {\n if (fieldIndex < fields.length && this.tokens.currentIndex() === fields[fieldIndex].start) {\n let needsCloseBrace = false;\n if (this.tokens.matches1(tt.bracketL)) {\n this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this`);\n } else if (this.tokens.matches1(tt.string) || this.tokens.matches1(tt.num)) {\n this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this[`);\n needsCloseBrace = true;\n } else {\n this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this.`);\n }\n while (this.tokens.currentIndex() < fields[fieldIndex].end) {\n if (needsCloseBrace && this.tokens.currentIndex() === fields[fieldIndex].equalsIndex) {\n this.tokens.appendCode(\"]\");\n }\n this.processToken();\n }\n this.tokens.appendCode(\"}\");\n fieldIndex++;\n } else if (\n rangeToRemoveIndex < rangesToRemove.length &&\n this.tokens.currentIndex() >= rangesToRemove[rangeToRemoveIndex].start\n ) {\n if (this.tokens.currentIndex() < rangesToRemove[rangeToRemoveIndex].end) {\n this.tokens.removeInitialToken();\n }\n while (this.tokens.currentIndex() < rangesToRemove[rangeToRemoveIndex].end) {\n this.tokens.removeToken();\n }\n rangeToRemoveIndex++;\n } else if (this.tokens.currentIndex() === constructorInsertPos) {\n this.tokens.copyToken();\n if (needsConstructorInit) {\n this.tokens.appendCode(\n `;${this.makeConstructorInitCode(\n constructorInitializerStatements,\n instanceInitializerNames,\n className,\n )};`,\n );\n }\n this.processToken();\n } else {\n this.processToken();\n }\n }\n this.tokens.copyExpectedToken(tt.braceR);\n }\n\n makeConstructorInitCode(\n constructorInitializerStatements,\n instanceInitializerNames,\n className,\n ) {\n return [\n ...constructorInitializerStatements,\n ...instanceInitializerNames.map((name) => `${className}.prototype.${name}.call(this)`),\n ].join(\";\");\n }\n\n /**\n * Normally it's ok to simply remove type tokens, but we need to be more careful when dealing with\n * arrow function return types since they can confuse the parser. In that case, we want to move\n * the close-paren to the same line as the arrow.\n *\n * See https://github.com/alangpierce/sucrase/issues/391 for more details.\n */\n processPossibleArrowParamEnd() {\n if (this.tokens.matches2(tt.parenR, tt.colon) && this.tokens.tokenAtRelativeIndex(1).isType) {\n let nextNonTypeIndex = this.tokens.currentIndex() + 1;\n // Look ahead to see if this is an arrow function or something else.\n while (this.tokens.tokens[nextNonTypeIndex].isType) {\n nextNonTypeIndex++;\n }\n if (this.tokens.matches1AtIndex(nextNonTypeIndex, tt.arrow)) {\n this.tokens.removeInitialToken();\n while (this.tokens.currentIndex() < nextNonTypeIndex) {\n this.tokens.removeToken();\n }\n this.tokens.replaceTokenTrimmingLeftWhitespace(\") =>\");\n return true;\n }\n }\n return false;\n }\n\n /**\n * An async arrow function might be of the form:\n *\n * async <\n * T\n * >() => {}\n *\n * in which case, removing the type parameters will cause a syntax error. Detect this case and\n * move the open-paren earlier.\n */\n processPossibleAsyncArrowWithTypeParams() {\n if (\n !this.tokens.matchesContextual(ContextualKeyword._async) &&\n !this.tokens.matches1(tt._async)\n ) {\n return false;\n }\n const nextToken = this.tokens.tokenAtRelativeIndex(1);\n if (nextToken.type !== tt.lessThan || !nextToken.isType) {\n return false;\n }\n\n let nextNonTypeIndex = this.tokens.currentIndex() + 1;\n // Look ahead to see if this is an arrow function or something else.\n while (this.tokens.tokens[nextNonTypeIndex].isType) {\n nextNonTypeIndex++;\n }\n if (this.tokens.matches1AtIndex(nextNonTypeIndex, tt.parenL)) {\n this.tokens.replaceToken(\"async (\");\n this.tokens.removeInitialToken();\n while (this.tokens.currentIndex() < nextNonTypeIndex) {\n this.tokens.removeToken();\n }\n this.tokens.removeToken();\n // We ate a ( token, so we need to process the tokens in between and then the ) token so that\n // we remain balanced.\n this.processBalancedCode();\n this.processToken();\n return true;\n }\n return false;\n }\n\n processPossibleTypeRange() {\n if (this.tokens.currentToken().isType) {\n this.tokens.removeInitialToken();\n while (this.tokens.currentToken().isType) {\n this.tokens.removeToken();\n }\n return true;\n }\n return false;\n }\n\n shiftMappings(\n mappings,\n prefixLength,\n ) {\n for (let i = 0; i < mappings.length; i++) {\n const mapping = mappings[i];\n if (mapping !== undefined) {\n mappings[i] = mapping + prefixLength;\n }\n }\n return mappings;\n }\n}\n","\"use strict\";\nexports.__esModule = true;\nexports.LinesAndColumns = void 0;\nvar LF = '\\n';\nvar CR = '\\r';\nvar LinesAndColumns = /** @class */ (function () {\n function LinesAndColumns(string) {\n this.string = string;\n var offsets = [0];\n for (var offset = 0; offset < string.length;) {\n switch (string[offset]) {\n case LF:\n offset += LF.length;\n offsets.push(offset);\n break;\n case CR:\n offset += CR.length;\n if (string[offset] === LF) {\n offset += LF.length;\n }\n offsets.push(offset);\n break;\n default:\n offset++;\n break;\n }\n }\n this.offsets = offsets;\n }\n LinesAndColumns.prototype.locationForIndex = function (index) {\n if (index < 0 || index > this.string.length) {\n return null;\n }\n var line = 0;\n var offsets = this.offsets;\n while (offsets[line + 1] <= index) {\n line++;\n }\n var column = index - offsets[line];\n return { line: line, column: column };\n };\n LinesAndColumns.prototype.indexForLocation = function (location) {\n var line = location.line, column = location.column;\n if (line < 0 || line >= this.offsets.length) {\n return null;\n }\n if (column < 0 || column > this.lengthOfLine(line)) {\n return null;\n }\n return this.offsets[line] + column;\n };\n LinesAndColumns.prototype.lengthOfLine = function (line) {\n var offset = this.offsets[line];\n var nextOffset = line === this.offsets.length - 1\n ? this.string.length\n : this.offsets[line + 1];\n return nextOffset - offset;\n };\n return LinesAndColumns;\n}());\nexports.LinesAndColumns = LinesAndColumns;\nexports[\"default\"] = LinesAndColumns;\n","import {TokenType as tt} from \"../parser/tokenizer/types\";\n\nimport getImportExportSpecifierInfo from \"./getImportExportSpecifierInfo\";\n\n/**\n * Special case code to scan for imported names in ESM TypeScript. We need to do this so we can\n * properly get globals so we can compute shadowed globals.\n *\n * This is similar to logic in CJSImportProcessor, but trimmed down to avoid logic with CJS\n * replacement and flow type imports.\n */\nexport default function getTSImportedNames(tokens) {\n const importedNames = new Set();\n for (let i = 0; i < tokens.tokens.length; i++) {\n if (\n tokens.matches1AtIndex(i, tt._import) &&\n !tokens.matches3AtIndex(i, tt._import, tt.name, tt.eq)\n ) {\n collectNamesForImport(tokens, i, importedNames);\n }\n }\n return importedNames;\n}\n\nfunction collectNamesForImport(\n tokens,\n index,\n importedNames,\n) {\n index++;\n\n if (tokens.matches1AtIndex(index, tt.parenL)) {\n // Dynamic import, so nothing to do\n return;\n }\n\n if (tokens.matches1AtIndex(index, tt.name)) {\n importedNames.add(tokens.identifierNameAtIndex(index));\n index++;\n if (tokens.matches1AtIndex(index, tt.comma)) {\n index++;\n }\n }\n\n if (tokens.matches1AtIndex(index, tt.star)) {\n // * as\n index += 2;\n importedNames.add(tokens.identifierNameAtIndex(index));\n index++;\n }\n\n if (tokens.matches1AtIndex(index, tt.braceL)) {\n index++;\n collectNamesForNamedImport(tokens, index, importedNames);\n }\n}\n\nfunction collectNamesForNamedImport(\n tokens,\n index,\n importedNames,\n) {\n while (true) {\n if (tokens.matches1AtIndex(index, tt.braceR)) {\n return;\n }\n\n const specifierInfo = getImportExportSpecifierInfo(tokens, index);\n index = specifierInfo.endIndex;\n if (!specifierInfo.isType) {\n importedNames.add(specifierInfo.rightName);\n }\n\n if (tokens.matches2AtIndex(index, tt.comma, tt.braceR)) {\n return;\n } else if (tokens.matches1AtIndex(index, tt.braceR)) {\n return;\n } else if (tokens.matches1AtIndex(index, tt.comma)) {\n index++;\n } else {\n throw new Error(`Unexpected token: ${JSON.stringify(tokens.tokens[index])}`);\n }\n }\n}\n","import CJSImportProcessor from \"./CJSImportProcessor\";\nimport computeSourceMap, {} from \"./computeSourceMap\";\nimport {HelperManager} from \"./HelperManager\";\nimport identifyShadowedGlobals from \"./identifyShadowedGlobals\";\nimport NameManager from \"./NameManager\";\nimport {validateOptions} from \"./Options\";\n\nimport {parse} from \"./parser\";\n\nimport TokenProcessor from \"./TokenProcessor\";\nimport RootTransformer from \"./transformers/RootTransformer\";\nimport formatTokens from \"./util/formatTokens\";\nimport getTSImportedNames from \"./util/getTSImportedNames\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;\n\nexport function getVersion() {\n /* istanbul ignore next */\n return \"3.35.1\";\n}\n\nexport function transform(code, options) {\n validateOptions(options);\n try {\n const sucraseContext = getSucraseContext(code, options);\n const transformer = new RootTransformer(\n sucraseContext,\n options.transforms,\n Boolean(options.enableLegacyBabel5ModuleInterop),\n options,\n );\n const transformerResult = transformer.transform();\n let result = {code: transformerResult.code};\n if (options.sourceMapOptions) {\n if (!options.filePath) {\n throw new Error(\"filePath must be specified when generating a source map.\");\n }\n result = {\n ...result,\n sourceMap: computeSourceMap(\n transformerResult,\n options.filePath,\n options.sourceMapOptions,\n code,\n sucraseContext.tokenProcessor.tokens,\n ),\n };\n }\n return result;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e) {\n if (options.filePath) {\n e.message = `Error transforming ${options.filePath}: ${e.message}`;\n }\n throw e;\n }\n}\n\n/**\n * Return a string representation of the sucrase tokens, mostly useful for\n * diagnostic purposes.\n */\nexport function getFormattedTokens(code, options) {\n const tokens = getSucraseContext(code, options).tokenProcessor.tokens;\n return formatTokens(code, tokens);\n}\n\n/**\n * Call into the parser/tokenizer and do some further preprocessing:\n * - Come up with a set of used names so that we can assign new names.\n * - Preprocess all import/export statements so we know which globals we are interested in.\n * - Compute situations where any of those globals are shadowed.\n *\n * In the future, some of these preprocessing steps can be skipped based on what actual work is\n * being done.\n */\nfunction getSucraseContext(code, options) {\n const isJSXEnabled = options.transforms.includes(\"jsx\");\n const isTypeScriptEnabled = options.transforms.includes(\"typescript\");\n const isFlowEnabled = options.transforms.includes(\"flow\");\n const disableESTransforms = options.disableESTransforms === true;\n const file = parse(code, isJSXEnabled, isTypeScriptEnabled, isFlowEnabled);\n const tokens = file.tokens;\n const scopes = file.scopes;\n\n const nameManager = new NameManager(code, tokens);\n const helperManager = new HelperManager(nameManager);\n const tokenProcessor = new TokenProcessor(\n code,\n tokens,\n isFlowEnabled,\n disableESTransforms,\n helperManager,\n );\n const enableLegacyTypeScriptModuleInterop = Boolean(options.enableLegacyTypeScriptModuleInterop);\n\n let importProcessor = null;\n if (options.transforms.includes(\"imports\")) {\n importProcessor = new CJSImportProcessor(\n nameManager,\n tokenProcessor,\n enableLegacyTypeScriptModuleInterop,\n options,\n options.transforms.includes(\"typescript\"),\n Boolean(options.keepUnusedImports),\n helperManager,\n );\n importProcessor.preprocessTokens();\n // We need to mark shadowed globals after processing imports so we know that the globals are,\n // but before type-only import pruning, since that relies on shadowing information.\n identifyShadowedGlobals(tokenProcessor, scopes, importProcessor.getGlobalNames());\n if (options.transforms.includes(\"typescript\") && !options.keepUnusedImports) {\n importProcessor.pruneTypeOnlyImports();\n }\n } else if (options.transforms.includes(\"typescript\") && !options.keepUnusedImports) {\n // Shadowed global detection is needed for TS implicit elision of imported names.\n identifyShadowedGlobals(tokenProcessor, scopes, getTSImportedNames(tokenProcessor));\n }\n return {tokenProcessor, scopes, nameManager, importProcessor, helperManager};\n}\n","/**\r\n * Viji Worker Runtime - Secure WebWorker for artist scene execution\r\n * This worker provides the complete artist API and handles scene rendering\r\n */\r\n\r\nimport { VijiWorkerRuntime } from './VijiWorkerRuntime.js';\r\nimport { SceneAnalyzer } from '../utils/SceneAnalyzer.js';\r\nimport { transform } from 'sucrase';\r\n\r\n// Initialize runtime\r\nconst runtime = new VijiWorkerRuntime();\r\n\r\n// Dynamic scene code execution\r\nlet renderFunction: ((viji: typeof runtime.viji) => void) | null = null;\r\n\r\n/**\r\n * Strip TypeScript type annotations from scene code, producing valid JavaScript.\r\n * Scene code is authored in TypeScript (for Monaco IntelliSense) but executed\r\n * as JavaScript via new Function() / new AsyncFunction(). This bridge handles\r\n * the conversion transparently.\r\n * \r\n * Only applied to native and P5 modes — shader (GLSL) code is never processed.\r\n */\r\nfunction prepareSceneCode(code: string): string {\r\n return transform(code, {\r\n transforms: ['typescript'],\r\n disableESTransforms: true,\r\n }).code;\r\n}\r\n\r\n// Function to set the scene code dynamically\r\nasync function setSceneCode(sceneCode: string): Promise<void> {\r\n try {\r\n // Reset parameter state for new scene\r\n runtime.resetParameterState();\r\n \r\n // Detect renderer type using shared utility\r\n const rendererType = SceneAnalyzer.detectRendererType(sceneCode);\r\n \r\n if (rendererType === 'shader') {\r\n // Shader mode: Pass entire shader code to adapter (no TS stripping — this is GLSL)\r\n await runtime.initShaderMode(sceneCode);\r\n \r\n // Parameters are extracted by ShaderParameterParser inside adapter\r\n // and registered via registerShaderParameter\r\n // Send parameters to host\r\n runtime.sendAllParametersToHost();\r\n } else if (rendererType === 'p5') {\r\n // P5.js mode: Strip TypeScript annotations, then extract setup and render functions\r\n const jsCode = prepareSceneCode(sceneCode);\r\n const functionBody = jsCode + '\\n' +\r\n 'return { ' +\r\n ' setup: typeof setup !== \"undefined\" ? setup : null, ' +\r\n ' render: typeof render !== \"undefined\" ? render : null ' +\r\n '};';\r\n \r\n // Execute scene code to extract functions\r\n const sceneFunction = new Function('viji', 'p5', functionBody);\r\n const { setup, render } = sceneFunction(runtime.viji, null);\r\n \r\n if (!render) {\r\n throw new Error('P5 mode requires a render(viji, p5) function');\r\n }\r\n \r\n // Initialize P5 mode asynchronously\r\n await runtime.initP5Mode(setup, render);\r\n \r\n // After scene code execution, automatically send all parameters to host\r\n runtime.sendAllParametersToHost();\r\n } else {\r\n // Native mode: Strip TypeScript annotations, support top-level await\r\n const jsCode = prepareSceneCode(sceneCode);\r\n const functionBody = jsCode + '\\n' +\r\n 'if (typeof render === \"function\") {\\n' +\r\n ' return render;\\n' +\r\n '}\\n' +\r\n 'throw new Error(\"Scene code must define a render function\");';\r\n \r\n // Use AsyncFunction to support top-level await\r\n const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;\r\n const sceneFunction = new (AsyncFunction as any)('viji', functionBody);\r\n renderFunction = await sceneFunction(runtime.viji);\r\n \r\n // Update global reference for the runtime to access\r\n (self as any).renderFunction = renderFunction;\r\n \r\n // After scene code execution, automatically send all parameters to host\r\n runtime.sendAllParametersToHost();\r\n }\r\n } catch (error) {\r\n console.error('Failed to load scene code:', error);\r\n self.postMessage({\r\n type: 'error',\r\n id: `scene_error_${Date.now()}`,\r\n timestamp: Date.now(),\r\n data: {\r\n message: `Scene code error: ${(error as Error).message}`,\r\n code: 'SCENE_CODE_ERROR'\r\n }\r\n });\r\n }\r\n}\r\n\r\n// Expose functions to global scope for the runtime to access\r\n(self as any).setSceneCode = setSceneCode; "],"names":["self","match","num","next","texture","renderFunction","ContextualKeyword","TokenType","comma","tt","charCodes","semicolon","IdentifierRole","JSXRole","global","this","input","url","d","b","VError","NoopContext","DetailContext","DetailUnionResolver","__extends","require$$0","TType","name","TName","TLiteral","TArray","_i","TTuple","TUnion","TIntersection","TEnumType","TEnumLiteral","TIface","TOptional","TProp","TFunc","TParam","TParamList","param","BasicType","array_1","require$$1","Checker","t.union","t.lit","t.iface","t.array","t.opt","createCheckers","OptionsGenTypes","FunctionType","isJSXEnabled","isTypeScriptEnabled","isFlowEnabled","token","nextToken","LinesAndColumns"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8RT,KAAK,oBAAoB,i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AAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,KAAK,UAAU;AACb,aAAO;AAAA,IACT,K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3C;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAI;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAI;AAAA,EAAM;AAAA;AAAA,EAE9I;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE3G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAExG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG,kBAAkB,aAAa;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEtI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG,kBAAkB,aAAa;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEtI,kBAAkB,OAAO;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA;AAAA,EAElI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAErI,kBAAkB,YAAY;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAErI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG,kBAAkB,UAAU;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEnI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG,kBAAkB,UAAU;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEnI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAExGA,UAAG,UAAU,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1H;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE/G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE3G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAExGA,UAAG,SAAS,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,UAAU,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1H;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEpI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;A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AAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,gBAAgB;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,aAAa,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE7H;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEhH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,aAAa,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE7H;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,YAAY;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAErI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,YAAY,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5H;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,WAAW,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAE1HA,UAAG,OAAO,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEvH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA;AAAA,EAE9G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,SAAS,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,SAAS;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAElI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI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AAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA;AAAA,GAEzGA,UAAG,YAAY,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5H;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,QAAQ,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAExH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,SAAS;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAElI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,aAAa,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE7H;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,QAAQ;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEjI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEpI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAE/GA,UAAG,OAAO,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEvH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;A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AI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEnI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,eAAe,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE/H;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,cAAc;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEvI,kBAAkB,OAAO;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEhI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,UAAU;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEnI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,QAAQ,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAExH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEpI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEpI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE9G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EA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AI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEpI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,QAAQ;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEjI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,aAAa;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEtI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,YAAY;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAErI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,cAAc;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEvI,kBAAkB,UAAU;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEnI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEpI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE9G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA;AAAA,EAE1G,kBAAkB,aAAa;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEtI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,YAAY;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAErI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,WAAW,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE3H;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAM;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAM;AAAA;AAAA,EAEpH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,cAAc;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEvI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,QAAQ;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEjI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEpI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAA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A,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEpI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA;AAAA,EAE9G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;A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AI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,WAAW;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEpI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G,kBAAkB,UAAU;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEnI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,QAAQ,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAExH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,SAAS,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,UAAU,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1H;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,GAEzGA,UAAG,SAAS,KAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAEzH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI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","x_google_ignoreList":[9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71]}
|